用另一个数组的子集切片一维numpy数组
我有一个数组,叫做data,它的形状是(922, 6),还有一个叫trgt的长一维时间序列。data[0]里存的是我需要从trgt中切割出来的子集的起始索引,而data[1]里存的是结束索引。
我尝试了
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.])
这些是索引处的值,但不是子集。我又尝试了
trgt[tuple(data[:,0:2][0].astype(int))]
>>> *** IndexError: invalid index
我该如何获取这个子集呢?
1 个回答
4
这看起来有点奇怪:
b = data[:, 0:2][0]
因为在NumPy数组中,这和下面的内容是一样的:
b = data[0, :2]
也就是说,这是数组第一行的前两列。如果data
是一个二维数组,你会得到一个维度为(2,)的数组。这个数组可以直接用来索引一个一维向量:
trgt[b]
不需要把它转换成切片或元组。
更新:根据更新后的问题描述,似乎第一列是起始索引,第二列是结束索引。那么自然的做法就是创建一个数组的列表。二维数组并不是一个好的输出格式,因为每一行的列数应该是相同的。
在这种情况下,一行代码就可以搞定。
lst = [ trgt[row[0]:row[1]] for row in data ]