问题:
A
是一个二维的多维数组(i,j)
,B
是一个布尔数组,它的形状与我想根据A
的值定义的形状相同。
我想通过两个广播索引来定义B
:
i_b
是选择第一个坐标的索引的数组。ij_b
是一个布尔数组,它选择索引j,给定i已经被选择。
产品代码:
我编写的代码:
A = np.arange(50).reshape(5, 10) #shape: (i, j)
B = np.full(A.shape, False) #shape: (i, j)
#We pick first dimension
i_b = np.array([0, 2, 4])
#We pick second dimension given the first dimension has been chosen
ij_b = A[i_b]%2 == 0
#Change B according to i and ij
B[i_b][ij_b] = True
print(B[i_b][ij_b])
字符串
输出:[False False False False False False False False False False False False False False False]
。
B[i_b][ij_b] = True
这一行好像没有改变B
,为什么会这样?如何进行此操作,以矢量化的方式改变B
?
我知道我可以写一个循环:
for k in range(len(i_b)):
B[i_b[k]][ij_b[k]] = True
print(B[i_b][ij_b])
型
输出:[ True True True True True True True True True True True True True True True]
但之后它就不再被矢量化了。
1条答案
按热度按时间nhhxz33t1#
如文件中所述:
高级索引总是返回数据的副本(与返回视图的基本切片相反)。
我们可以解决问题的问题(从Numpy: chained boolean indexing not properly updating boolean array without using np.where),使用:
第一个月