我想知道是否有一个奇特的 numpy 索引来执行这个操作。如果我有一个数组和两个限制,很容易用冒号索引:
import numpy as np
myArray = np.arange(10)
lowLimit = 2
highLimit = 5
print myArray[lowLimit:highLimit]
这给[2 3 4]
. 但是,如果您有两个用于限制的数组:
lowLimit = np.ones(10) * 2
highLimit = np.ones(10) * 5
之前的操作不起作用。
你将如何获得带有 myArray 切片区域的二维数组?:
array([[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4],
[2, 3, 4]])
更新:在此示例中,限制数组具有常量值,但情况可能并非如此。
您连接/加入一些切片的一种或多种方式:
In [139]: x = np.arange(10)
In [140]: low,high = [0,3,5,3],[2,5,7,5]
列表理解:
In [141]: [x[i:j] for i,j in zip(low,high)]
Out[141]: [array([0, 1]), array([3, 4]), array([5, 6]), array([3, 4])]
由于所有切片的大小相同,因此可以将它们连接成一个新数组:
In [142]: np.stack(_)
Out[142]:
array([[0, 1],
[3, 4],
[5, 6],
[3, 4]])
如果它们的长度不同,stack
将不起作用。np.array(_)
将产生一个对象 dtype 数组,具有不同长度的组件数组。
您还可以生成所有索引的数组,并使用它:
In [160]: np.hstack([np.r_[slice(i,j)] for i,j in zip(low,high)])
Out[160]: array([0, 1, 3, 4, 5, 6, 3, 4])
In [161]: x[_].reshape(4,2) # reshape if all slices are same length:
Out[161]:
array([[0, 1],
[3, 4],
[5, 6],
[3, 4]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句