使用多个布尔数组进行索引和分配

Using multiple boolean arrays for indexing and assigning

我刚遇到以下问题我真的不明白:

import numpy as np
a = np.arange(10)
m = a < 5
n = a[m] < 2

print a[m][n]
# array([0, 1])

到目前为止一切顺利。问题来了:

a[m][n] *= 10000
print a[m][n]
# array([0, 1])

我不明白为什么赋值 a[m][n] *= 10000 不起作用。我确信如果我只使用一个数组进行索引它就可以工作:

a[m] *= 10000
print a[m]
# array([    0, 10000, 20000, 30000, 40000])

如有任何帮助,我们将不胜感激。谢谢!

命令:

a[m] *= 1000

执行 in-place assignment,而:

a[m][n] *= 1000

首先创建一个新数组a[m],然后对新副本进行就地赋值,这就是未修改原始数组的原因。