为什么我不能索引2dnumpy.ndarray公司分配新值

2024-04-26 00:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想索引一个2d数组并获取这个数组的一个子集。 然后我将这个子集指定给另一个与这个子集形状相同的。 但是原来的排列没有改变。你知道吗

下面是一个例子。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]])

Tags: offalsetruenpmask数组array子集
2条回答

请执行以下操作:

ma[np.ix_(mask, mask)] = sub
np.where(mask, 1, np.where(mask, 1, ma).T).T
  1. np.where(mask, 1, ma)在列中使用mask替换为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]])

相关问题 更多 >

    热门问题