我如何快速抽取一个numpy数组?

时间:2019-06-13 17:18:12

标签: python arrays numpy

我需要一个抽取,删除id=0,streams=v id=1,streams=a?数组中n个中的m个的函数。例如,要删除1 in 2或删除2 in3。因此,数组为: numpy

按1:2抽取将变为: [7, 4, 3, 5, 9, 2, 4, 1, 6, 8]

我想知道是否有可能将数组从1d数组N长整形为2d和N / 2,2长然后减少多余的维数?

理想情况下,我不仅要转储抽取的样本,还想在每组值(在此示例对中)中找到最大值。例如: [7, 3, 9, 4, 6]

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

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

抽取是必需的,因为绘制每个值所花费的时间太长,这意味着我必须在绘制数组之前减小数组的大小,但我需要快速进行此操作。因此,[7, 5, 9, 4, 8]for循环会花费太长时间。

2 个答案:

答案 0 :(得分: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,这都应该有效。

答案 1 :(得分:0)

找到最大值:

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)适用时速度更快