我想索引2d ndarray并获取此ndarray的子集。 然后,我将此子集ndarray分配给另一个与该子集ndarray具有相同形状的ndarry。 但是原始的ndarray并没有改变。
这里是一个示例。mat
在分配操作后未更改。
我要给一个subset of ndarray
和一个ndarray.
import numpy as np
ma = np.array([1,2,3,4,5] * 5).reshape(5,5)
mask = np.array([False, True, False, True, True])
sub = np.array([[100,101, 102],
[103, 104, 105],
[106,107,108]])
ma[mask][:,mask] = sub
print(ma)
我期望的是:
array([[1, 1, 3, 1, 5],
[1, 100, 1, 101, 102],
[1, 1, 3, 1, 5],
[1, 103, 3, 104, 105],
[1, 106, 3, 107, 108]])
但是垫子没有改变:
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]])
答案 0 :(得分:0)
np.where(mask, 1, np.where(mask, 1, ma).T).T
np.where(mask, 1, ma)
使用掩码在列中替换为1 np.where(mask, 1, np.where(mask, 1, ma).T)
转置结果并再次重复以掩盖行np.where(mask, 1, np.where(mask, 1, ma).T).T
移回输出
np.where(mask, 1, np.where(mask, 1, ma).T).T
array([[1, 1, 3, 1, 5],
[1, 1, 1, 1, 1],
[1, 1, 3, 1, 5],
[1, 1, 1, 1, 1],
[1, 1, 3, 1, 5]])
答案 1 :(得分:0)
执行此操作:
ma[np.ix_(mask, mask)] = sub