基于另一个数组的ndarray的子​​集

时间:2013-12-07 02:59:20

标签: python numpy multidimensional-array

我有一组整数,它们需要按4分组。我还想根据另一个标准start < t < stop选择它们。我试过了

data[group].reshape((-1,4))[start < t < stop]

但抱怨start < t < stop,因为这是硬编码语法。我可以以某种方式与start < tt < stop的两个数组相交吗?

2 个答案:

答案 0 :(得分:2)

array的布尔索引的正确方法应如下所示:

>>> import numpy as np
>>> a=np.random.randint(0,20,size=24)
>>> b=np.arange(24)
>>> b[(8<a)&(a<15)] #rather than 8<a<15
array([ 3,  5,  6, 11, 13, 16, 17, 18, 20, 21, 22, 23])

但是你可能无法将生成的数组重新整形为(-1,4)的形状,这里生成的数组包含3 * 4个元素是巧合。

编辑,现在我更了解您的OP。你总是首先重塑data[group],对吧?:

>>> b=np.arange(96)
>>> b.reshape((-1,4))[(8<a)&(a<15)]
array([[12, 13, 14, 15],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [44, 45, 46, 47],
       [52, 53, 54, 55],
       [64, 65, 66, 67],
       [68, 69, 70, 71],
       [72, 73, 74, 75],
       [80, 81, 82, 83],
       [84, 85, 86, 87],
       [88, 89, 90, 91],
       [92, 93, 94, 95]])

答案 1 :(得分:2)

这个怎么样?

import numpy as np

arr = np.arange(32)
t = np.arange(300, 364, 2)
start = 310
stop = 352
mask = np.logical_and(start < t, t < stop)
print mask
print arr[mask].reshape((-1,4))

我在重塑之前做了掩饰,不确定这是不是你想要的。关键部分可能是logical_and()。