我在编辑numpy数组中的值时遇到问题
import numpy as np
foo = np.ones(10,10,2)
foo[row_criteria, col_criteria, 0] += 5
foo[row_criteria,:,0][:,col_criteria] += 5
row_criteria和col_criteria是布尔数组(1D)。在第一种情况下,我得到了
“形状不匹配:对象无法广播为单个形状”错误
在第二种情况下,+ = 5根本没有得到应用。当我做的时候
foo[row_criteria,:,0][:,col_criteria] + 5
我得到一个修改后的返回值但是修改该值似乎不起作用......
有人可以解释如何解决这个问题吗?谢谢!
答案 0 :(得分:2)
你想:
foo[np.ix_(row_criteria, col_criteria, [0])] += 5
要了解这是如何工作的,请参考以下示例:
import numpy as np
A = np.arange(25).reshape([5, 5])
print A[[0, 2, 4], [0, 2, 4]]
# [0, 12, 24]
# The above example gives the the elements A[0, 0], A[2, 2], A[4, 4]
# But what if I want the "outer product?" ie for [[0, 2, 4], [1, 3]] i want
# A[0, 1], A[0, 3], A[2, 1], A[2, 3], A[4, 1], A[4, 3]
print A[np.ix_([0, 2, 4], [1, 3])]
# [[ 1 3]
# [11 13]
# [21 23]]
同样适用于布尔索引。同样np.ix_
没有做任何真正令人惊奇的事情,它只是重塑了它的论点,所以它们可以相互广播:
i, j = np.ix_([0, 2, 4], [1, 3])
print i.shape
# (3, 1)
print j.shape
# (1, 2)