为什么我无法索引二维numpy.ndarray并分配新值

时间:2019-05-13 08:55:08

标签: python numpy numpy-ndarray

我想索引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]])

2 个答案:

答案 0 :(得分:0)

np.where(mask, 1, np.where(mask, 1, ma).T).T
  1. np.where(mask, 1, ma)使用掩码在列中替换为1
  2. np.where(mask, 1, np.where(mask, 1, ma).T)转置结果并再次重复以掩盖行
  3. 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