我一直在尝试将各个元素从一个2D数组复制到另一个2D数组。我的代码如下:
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:元素比较失败;返回标量,但将来会执行元素比较 这是否意味着数据集(tp_matrix)出现了问题?
编辑2:我尝试过allclose和isclose函数,但是我收到了这个错误: TypeError:输入类型不支持ufunc'isfinite',根据强制转换规则''safe',输入无法安全地强制转换为任何支持的类型 数据存储为浮点数。它也有点大(399 x 5825)。
编辑3:解决了。我不得不重新安装python。
答案 0 :(得分:3)
使用np.allclose
来测试float数组的(几乎)相等性,因为浮点数在计算机中的表示方式。
有关详情,请参阅"What Every Computer Scientist Should Know About Floating-Point Arithmetic"
答案 1 :(得分: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,但在你的情况下,舍入错误可能导致测试为False。
解决方法可能是以下测试:
sum(sum(two==three)) == two.shape[0]*three.shape[1]
虽然可能有更有效的方法。