首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能为2-d numpy.ndarray建立索引并分配新值

为什么我不能为2-d numpy.ndarray建立索引并分配新值
EN

Stack Overflow用户
提问于 2019-05-13 16:55:08
回答 2查看 121关注 0票数 1

我想索引一个2dndarray并获取这个ndarray的一个子集。然后,我将这个子集ndarray分配给与这个子集ndarray具有相同形状的另一个ndarry。但是原始的ndarray没有改变。

这里有一个例子,赋值操作后mat没有改变。

我想要的是分配一个具有另一个ndarray.subset of ndarray

代码语言:javascript
运行
复制
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)

我所期望的是:

代码语言:javascript
运行
复制
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]])

但是mat没有改变:

代码语言:javascript
运行
复制
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]])
EN

回答 2

Stack Overflow用户

发布于 2019-05-13 17:20:40

代码语言:javascript
运行
复制
np.where(mask, 1, np.where(mask, 1, ma).T).T

  1. np.where(mask, 1, ma)使用掩码替换为columns
  2. np.where(mask, 1, np.where(mask, 1, ma).T)中的1转置结果,然后再次重复以掩码rows
  3. np.where(mask, 1, np.where(mask, 1, ma).T).T转置返回

输出

代码语言:javascript
运行
复制
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]])
票数 0
EN

Stack Overflow用户

发布于 2019-05-13 17:28:52

执行以下操作:

代码语言:javascript
运行
复制
ma[np.ix_(mask, mask)] = sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56108865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档