Python 如何快速摧毁numpy阵列?

Python 如何快速摧毁numpy阵列?,python,arrays,numpy,Python,Arrays,Numpy,我需要一个函数,它可以对数组中的m进行抽取、移除。例如,删除1/2或删除2/3。所以一个数组是: [7,4,3,5,9,2,4,1,6,8] 以1:2的比例减少将成为: [7,3,9,4,6] 我想知道是否有可能将数组从1d数组N长重塑为2d和N/2,2长,然后去掉额外的维度 理想情况下,我不只是转储抽取的样本,而是希望找到每组(在本例中为一对)值的最大值。例如: [7,5,9,4,8] 有没有一种方法可以在每个集合中找到最大值,而不仅仅是放弃它 另一个挑战是,这里的重点是绘制值 需要进行抽取,

我需要一个函数,它可以对数组中的m进行抽取、移除。例如,删除1/2或删除2/3。所以一个数组是:
[7,4,3,5,9,2,4,1,6,8]

以1:2的比例减少将成为:
[7,3,9,4,6]

我想知道是否有可能将数组从1d数组N长重塑为2d和N/2,2长,然后去掉额外的维度

理想情况下,我不只是转储抽取的样本,而是希望找到每组(在本例中为一对)值的最大值。例如:
[7,5,9,4,8]

有没有一种方法可以在每个集合中找到最大值,而不仅仅是放弃它

另一个挑战是,这里的重点是绘制值

需要进行抽取,因为绘制每个值花费的时间太长,这意味着我必须在绘制数组之前减小数组的大小,但我需要快速完成此操作。因此,对于
循环将花费太长时间。

要找到最大值:

1) k除以N:

k,N = 3,18
a = np.random.randint(0,10,N)
a
# array([0, 6, 6, 3, 7, 0, 9, 2, 3, 2, 5, 4, 2, 6, 9, 6, 3, 2])
a.reshape(-1,k).max(1)
# array([6, 7, 9, 5, 9, 6])
2) k不除以N:

k,N = 4,21
a = np.random.randint(0,10,N)
a
# array([4, 4, 6, 0, 0, 1, 7, 8, 2, 3, 0, 5, 7, 1, 1, 5, 7, 8, 3, 1, 7])
np.maximum.reduceat(a, np.arange(0,N,k))
# array([6, 8, 5, 7, 8, 7])

2) 应该一直有效,但我怀疑1)在适用的情况下速度更快

k,N = 3,18
a = np.random.randint(0,10,N) #[9, 6, 6, 6, 8, 4, 1, 4, 8, 1, 2, 6, 1, 8, 9, 8, 2, 8]
a = a[:-k:k] #[9, 6, 1, 1, 1]

无论k是否除以N,这都应该有效。

要回答部分问题,您可以使用[::2]索引对其他变量进行二次采样,以便快速绘制。请参见BenT:这样就可以进行抽取。谢谢在这个层次上非常简单。谢谢user2699,看起来真的很有用。就我所知,Paul,这个技巧(1)不起作用。该数组的长度仍为18个元素。尝试了两种方法,但有一些变化,没有发生抽取。当N除以k时,方法(2)似乎有效,因此可以使用(2)而不是(1)。非常感谢保罗的建议。应该从那开始@理查德:不客气。奇怪,尽管这对你不起作用。如果你逐字复制1)它最后不打印一个六元素数组吗?我打印了,没有。它返回原始数组。我正在使用Python3。这有区别吗?