Python 基于行中的值选择numpy列
假设我有一个2行10列的numpy数组。我想选择第一行中值为偶数的列。我希望得到的结果如下:Python 基于行中的值选择numpy列,python,numpy,indexing,Python,Numpy,Indexing,假设我有一个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 然而,这个方法转置了两次,我不认为它很像python。有没有办法做同样的工作?Numpy允许您分别沿每个维度进行选择。传入一个长度为维度数的索引元组 假设你的数组是 a =
a = list(range(10))
b = list(reversed(range(10)))
c = np.concatenate([a, b]).reshape(2, 10).T
c[c[:, 0] % 2 == 0].T
然而,这个方法转置了两次,我不认为它很像python。有没有办法做同样的工作?Numpy允许您分别沿每个维度进行选择。传入一个长度为维度数的索引元组 假设你的数组是
a = np.random.randint(10, size=(2, 10))
第一行中的偶数元素由掩码给出
m = (a[0, :] % 2 == 0)
您可以使用a[0]
来获取第一行,而不是a[0,:]
,因为缺少的索引是切片的同义词:
(获取所有内容)
现在,您可以将遮罩仅应用于第二个维度:
result = a[:, m]
也可以先将遮罩转换为索引。这两种方法之间有细微的差别,在这个简单的例子中你看不到。最大的区别通常是线性指数稍微快一点,特别是如果应用多次:
i = np.flatnonzero(m)
result = a[:, i]
不要为自己是新手而道歉。我们都在某个时刻。这是一个提出得很清楚的问题,这是你学习所需要做的一切。最坏的情况是,有人会将它标记为副本。现在,我明白了。非常感谢。当我试图通过
c[c[0]%2==0]
时得到的索引器现在更有意义了。是的c[0]%2==0
是一个大小为10的布尔数组。隐式索引的第一个维度的大小为2。它不匹配