2016-04-24 42 views
1

我一直在试图将各个元素从一个2D数组复制到另一个。我的代码如下:测试两个numpy二维数组的相等性

tp_matrix = np.array(tp_matrix) 
my_array = np.empty(shape = (tp_matrix.shape)) 

for x in range(tp_matrix.shape[0]): 
    for y in range(tp_matrix.shape[1]): 
     my_array[x][y] = tp_matrix[x][y] 


if(np.array_equal(my_array, tp_matrix)): 
    print('Equal') 
else: 
    print('Not equal') 

但是,两个数组由于某种原因不相等。这里有什么问题,我能做些什么来解决它?

我不能使用numpy的复制函数,因为我想稍后再对my_array中的某些元素进行修改,其他值与my_matrix的值相同。

编辑:在运行代码时,我收到以下消息: FutureWarning:elementwise comparison failed;返回标量,但将来会执行元素比较 这是否意味着数据集(tp_matrix)有问题?

编辑2:我已经尝试了allclose和isclose函数,但是我得到这个错误: TypeError:ufunc'isfinite'不支持输入类型,并且输入不能被安全地强制转换为任何支持的类型投射规则''安全'' 数据以浮点形式存储。它也有点大(399 x 5825)。

编辑3:解决。我不得不重新安装python。

+2

元素是否漂浮?比较花车可以有这样的效果。尝试https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.allclose.html#numpy.allclose。一般来说,永远不要测试花车的平等。 – JulienD

+0

试着用'numpy.allclose()'来给你的平等句容忍一下。此外,如果您提供有关您的数据的更多信息(可能是示例)以及您打算如何处理它,可能会有解决方案来创建“最佳副本”。 – armatita

+0

当我运行代码时,使用整数列表和浮点列表作为tp_matrix,我得到“Equal”。什么是你正在使用的tp_matrix? – 2016-04-24 19:50:48

回答

0

我试图模仿你正在经历什么,做了以下内容:

one = np.array([1,2,3]) 
two = np.array([one,one,one]) 
three = np.empty(shape=(two.shape)) 
for x in range(two.shape[0]): 
    for y in range(two.shape[1]): 
     three[x][y] = two[x][y] 

打印“两节”的内容,“三化”使以下结果

print(three) 
array([[ 1., 2., 3.], 
     [ 1., 2., 3.], 
     [ 1., 2., 3.]]) 
print(two) 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]) 

虽然这个小例子,如果我使用np.array_equal测试平等numpy的返回true,则可能是roundi ng错误会导致测试在您的情况下为False。

一种解决方法,这可能是下面的测试:

sum(sum(two==three)) == two.shape[0]*three.shape[1] 

虽然有可能是更有效的办法。