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

1 投票
1 回答
2168 浏览
提问于 2025-04-18 17:53

我有一个数组,叫做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 ]

撰写回答