python - 选择 n 列的每个交替组 - NumPy

标签 python arrays numpy

我想选择 numpy 数组中的每 n 组 n 列。这意味着我想要前 n 列,而不是接下来的 n 列,接下来的 n 列,而不是接下来的 n 列等等。

例如,使用以下数组和 n=2 :

import numpy as np
arr = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])

我想得到:

[[1, 2, 5, 6, 9, 10],
 [11, 12, 15, 16, 19, 20]]

并与 n=3 :

[[1, 2, 3, 7, 8, 9],
 [11, 12, 13, 17, 18, 19]]

n=1我们可以简单地使用语法arr[:,::2] ,但是 n>1 有类似的东西吗? ?

最佳答案

您可以使用modulus创建从 0 开始直到 2n 的渐变,然后从每个此类渐变中选择第一个 n。因此,对于每个斜坡,我们首先将 n 设置为 True,其余设置为 False,从而为我们提供一个涵盖整个长度的 bool 数组数组。然后,我们只需使用 boolean indexing沿着列选择最终输出的有效列。因此,实现看起来像这样 -

arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]

逐步运行代码以提供更好的想法 -

In [43]: arr
Out[43]: 
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])

In [44]: n = 3

In [45]: np.mod(np.arange(arr.shape[-1]),2*n)
Out[45]: array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3])

In [46]: np.mod(np.arange(arr.shape[-1]),2*n)<n
Out[46]: array([ True,True,True,False,False,False,True,True,True,False])

In [47]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[47]: 
array([[ 1,  2,  3,  7,  8,  9],
       [11, 12, 13, 17, 18, 19]])

示例在各种 n 上运行 -

In [29]: arr
Out[29]: 
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])

In [30]: n = 1

In [31]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[31]: 
array([[ 1,  3,  5,  7,  9],
       [11, 13, 15, 17, 19]])

In [32]: n = 2

In [33]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[33]: 
array([[ 1,  2,  5,  6,  9, 10],
       [11, 12, 15, 16, 19, 20]])

In [34]: n = 3

In [35]: arr[:,np.mod(np.arange(arr.shape[-1]),2*n)<n]
Out[35]: 
array([[ 1,  2,  3,  7,  8,  9],
       [11, 12, 13, 17, 18, 19]])

关于python - 选择 n 列的每个交替组 - NumPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347664/

相关文章:

python - 在单个 pyhive.execute 命令中执行多个查询

python - 如何在 Python 的 PDF 文档中包含 PDF 中的页面

java - 替换存储在字符串数组中的换行符

python - 插入排序实现不正确,还是时间复杂度理解不正确?

python - 如何将写在 *.txt 文件中的单个大数字转换为其单个数字的 numpy 数组?

python - Scipy Sparse - 距离矩阵(Scikit 或 Scipy)

python - 在纯 NumPy 中重写 for 循环以减少执行时间

java - 无法将数据从 Java 客户端发送到 Python 服务器

python - 按年龄计算数据框中性别的出现次数

javascript - 如何使用javascript获取数组的键?