用另一个数组的子集切片1d numpy数组

时间:2014-08-20 07:25:25

标签: python numpy scipy

我有一个数组数据,其形状(922,6)和trgt是一个长1d的时间序列。 data [0]有起始索引和数据[1]我需要从trgt切片的子集的结束索引。

我试试

trgt[data[:,0:2][0]]
>>> *** IndexError: arrays used as indices must be of integer (or boolean) type

其中

data[:,0:2][0]
>>> array([0., 100.])

所以我试试

trgt[data[:,0:2][0].astype(int)]
>>> array([9909., 9989.])

这些是索引的VALUES而不是子集。我试试

trgt[tuple(data[:,0:2][0].astype(int))]
>>> *** IndexError: invalid index

我怎样才能获得子集?

1 个答案:

答案 0 :(得分:4)

这看起来很奇怪:

b = data[:, 0:2][0]

因为使用NumPy数组它与:

相同
b = data[0, :2]

即。数组第一行的两个第一列。如果data是二维数组,您将得到一个维度为(2,)的数组。它可以直接用于索引1d向量:

trgt[b]

无需将其转换为切片或元组。

更新:根据问题的更新说明,第一列似乎包含起始索引,第二列包含结束索引。然后,自然要做的是创建一个数组列表。 2d数组不是一个好的输出格式,因为每列的列数应该相同。

在这种情况下,单行会做。

lst = [ trgt[row[0]:row[1]] for row in data ]