根据一行中的值选择numpy列

问题描述

假设我有一个包含2行10列的numpy数组。我想在第一行中选择具有偶数值的列。我想要的结果如下:

a = list(range(10))
b = list(reversed(range(10)))
c = np.concatenate([a,b]).reshape(2,10).T
c[c[:,0] % 2 == 0].T

但是,此方法转置两次,我不认为它是非常pythonic的。有没有办法做同样的工作清洁器?

解决方法

Numpy允许您分别沿每个维度进行选择。您传入长度为维数的索引元组。

说你的数组是

a = np.random.randint(10,size=(2,10))

第一行中的偶数元素由掩码给出

m = (a[0,:] % 2 == 0)

您可以使用a[0]而不是a[0,:]来获取第一行,因为丢失的索引与切片:同义(获取所有内容)。

现在,您可以将蒙版仅应用于 second 维度:

result = a[:,m]

您还可以先将掩码转换为索引。两种方法之间存在细微的差异,在这种简单情况下您不会看到。最大的不同通常是线性索引要快一些,尤其是如果多次应用:

i = np.flatnonzero(m)
result = a[:,i]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...