首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从列索引向量中选择二维数组元素的向量

从列索引向量中选择二维数组元素的向量
EN

Stack Overflow用户
提问于 2018-09-30 03:43:11
回答 1查看 854关注 0票数 1

我有一个二维数组A:

代码语言:javascript
复制
28  39  52
77  80  66   
7   18  24    
9   97  68

和列索引的矢量数组B:

代码语言:javascript
复制
1   
0   
2    
0

如何以Python的方式,使用基础Python或Numpy,从A中选择与B中的列索引不对应的元素?

我应该得到这个2D数组,它包含A的元素,而不是存储在B中的列索引:

代码语言:javascript
复制
28  52
80  66   
7   18    
97  68
EN

回答 1

Stack Overflow用户

发布于 2018-09-30 10:14:14

从我对你的另一个问题的回答来看,

Replace 2D array elements with zeros, using a column index vector

我们可以用之前使用的相同索引创建一个布尔mask

代码语言:javascript
复制
In [124]: mask = np.ones(A.shape, dtype=bool)                                                                           
In [126]: mask[np.arange(4), B] = False                                                                                 
In [127]: mask                                                                                                          
Out[127]: 
array([[ True, False,  True],
       [False,  True,  True],
       [ True,  True, False],
       [False,  True,  True]])

用布尔掩码索引一个数组会产生一个一维数组,因为在最一般的情况下,这样的掩码可以在每一行中选择不同数量的元素。

代码语言:javascript
复制
In [128]: A[mask]                                                                                                       
Out[128]: array([28, 52, 80, 66,  7, 18, 97, 68])

在这种情况下,可以将结果重塑为2d:

代码语言:javascript
复制
In [129]: A[mask].reshape(4,2)                                                                                          
Out[129]: 
array([[28, 52],
       [80, 66],
       [ 7, 18],
       [97, 68]])

因为你允许使用'base Python‘,所以下面是列表理解的答案:

代码语言:javascript
复制
In [136]: [[y for i,y in enumerate(x) if i!=b] for b,x in zip(B,A)]                                                     
Out[136]: [[28, 52], [80, 66], [7, 18], [97, 68]]

如果其他A中的所有0都来自插入,那么我们也可以使用以下命令获得mask (Out[127]

代码语言:javascript
复制
In [142]: A!=0                                                                                                          
Out[142]: 
array([[ True, False,  True],
       [False,  True,  True],
       [ True,  True, False],
       [False,  True,  True]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52571930

复制
相关文章

相似问题

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