当前位置: 首页 > 知识库问答 >
问题:

努比。INAD方法未正确计算数组与数组视图?

洪高刚
2023-03-14

我试图搜索并查看numpy数组是否位于另一个数组中,以便调试某些内容。

#Pattern
arr1 = np.array([1.62434536, -0.61175641, -0.52817175])
#type : np.ndarray
#dtype : 'float64'
#shape : (3,)

然后我有一个元组列表,其中每个元组中的第一个元素是一个n×m ndarray,假设这个对象叫做my_nest

arr2 = my_nest[0][0][0][0:3]
arr2
#array([ 1.62434536, -0.61175641, -0.52817175])
#type : np.ndarray
#dtype : 'float64'
#shape : (3,)

但是使用in1d方法会返回一个不直观的结果

np.in1d(arr1,arr2)
#array([False, False, False], dtype=bool)

我知道切片一个ndarray创建一个视图的对象,因为它是在内存中,但我甚至尝试包装np.copy在它周围创建一个新的对象在内存中,然后比较,我仍然得到False。

有人知道这是怎么回事吗?

共有1个答案

朱天逸
2023-03-14

如注释中所述,这是浮点精度的影响。您可以使用isclose而不是=根据小型阵列的源代码在一维中重新实现

import numpy as np

arr1 = np.array([1.62434536, -0.61175641, -0.52817175])
arr2 = np.array([1.62434536, -0.61175641, -0.52817175+1e-12])
print(arr1)
print(arr2)

print('isin:   ', np.in1d(arr1,arr2))

mask = np.zeros(len(arr1), dtype=bool)
for a in arr2:
    mask |= np.isclose(arr1, a)
print('isclose:', mask)

输出:

[ 1.62434536 -0.61175641 -0.52817175]
[ 1.62434536 -0.61175641 -0.52817175]
isin:    [ True  True False]
isclose: [ True  True  True]

 类似资料:
  • 问题内容: 我似乎在将数据推入状态数组时遇到问题。我正在尝试以这种方式实现它: 但是我相信这是不正确的方式,并导致可变性问题? 问题答案: 返回扩展数组的长度,而不是数组本身。Array.prototype.push()。 我猜您希望返回的值是数组。 不变性 似乎这是React的行为: 切勿直接更改this.state,因为此后调用setState()可能会替换您所做的更改。将此this.stat

  • 问题内容: 我对swig中的typemap和如何使用数组感到迷茫。我准备了一个使用swig在java和c之间使用数组的工作示例,但是我不知道这是否是正确的方法。 基本上,我想将字节数组从Java 传递给c作为“ signed char *” +它的大小,在c中对其进行修改并查看java中的更改,并在c中创建一个数组并在Java中使用它。 *在C中被修改为Java或其他的缓冲区?](http://c

  • 问题内容: 我有以下代码供用户单击按钮使用,当他们单击按钮时,正在查看的特定字符串将被收藏并存储在其他位置。 我有两个问题。 我现在所拥有的是什么问题?因为当您单击按钮时它会崩溃。 您将如何完成将要加载的字符串并将其保存到数组的load array方法,以便用户以后可以看到该数组? 谢谢你的时间!! 原木猫 问题答案: 函数返回。您可能想要像这样使用它: 该数组可以稍后在第二部分中使用。希望这可以

  • 我正在使用Rest Assured API通过selenium自动化程序执行调用后操作 响应中大约有1000个或更多JSON对象。而且它们没有响应的标识符,比如“name”或“contractinfo” 我的质疑: 1.我如何检索数组的总数(如从''到'')使用Rest保证API结合JAVA和selenium? 请建议。 使用的图书馆─

  • 问题内容: 当我在大学时使用C ++时,我被告知要尽可能使用多维数组(因此称为MDA),因为它以较大的块分配,因此具有更好的内存局部性。另一方面,阵列数组(AoA)被分配为多个较小的块,可能分散在物理内存中发现空缺的所有位置。 所以我想第一个问题是:这是神话,还是值得遵循的建议? 假设是后者,那么下一个问题将是在没有真正MDA的Java之类的语言中做什么。当然,用1DA模拟MDA并不难。本质上,具

  • 我对swig中的类型映射以及如何使用数组有点迷茫。我已经准备了一个使用swig在java和c之间使用数组的工作示例,但我不知道这是否是正确的方法。 基本上,我想把一个字节数组作为“有符号字符*”的大小从java传递到c,在c中修改它,查看java中的变化,在c中创建一个数组,并在java中使用它。 我已经研究了这些问题:如何使用Swig将数组(java中的long数组)从java传递到C,将数组作