【发布时间】:2016-12-05 06:31:59
【问题描述】:
这是我今天遇到的一个问题:我试图从(大)整个矩阵中减去矩阵的第一行。作为测试,我使所有行都相等。这是一个 MWE:
import numpy as np
first = np.random.normal(size=10)
reference = np.repeat((first,), 10000, axis=0)
copy_a = np.copy(reference)
copy_a -= copy_a[0]
print np.all(copy_a == 0) # prints False
哇哦 - False!所以我尝试了另一件事:
copy_b = np.copy(reference)
copy_b -= reference[0]
np.all(copy_b == 0) # prints True
检查新的copy_a数组,我发现copy_a[0:818]全为零,copy_a[820:]是原始值,而copy_a[819]被部分操作。
In [115]: copy_a[819]
Out[115]:
array([ 0. , 0. , 0.57704706, -0.22270692, -1.83793342,
0.58976187, -0.71014837, 1.80517635, -0.98758385, -0.65062774])
看起来在操作过程中,numpy 回去查看copy_a[0],发现它全为零,因此从数组的其余部分中减去零。我觉得这很奇怪。这是一个错误,还是预期的numpy 结果?
【问题讨论】:
-
在您的示例中,
-=正确工作的元素数量是 8192,正好是 2^13!
标签: python arrays numpy multidimensional-array