[英]Numpy: Want to select Different range of dimension in ndarray
我相信这是一个简单的问题,但我坚持下去。 我从像这样的张量中选择特定的尺寸
input = x[i, :, 38:44]
到目前为止一切都很好,但现在我想提取不同的维度范围,例如:
38:44 then 46 to 48 then 50 to 54.
我们怎样才能做到这一点?
您发送一个包含所需索引的列表。 例如,考虑以下数组:
import numpy as np
arr = np.array([[1,2], [2,3], [4,5], [6,7], [8,9]])
我们可以通过以下方式检索索引:
arr[[0,1,3], :]
输出:
array([[1, 2],
[2, 3],
[6, 7]])
在这里,我创建了所需索引[0,1,3]
的列表,并将相关维度作为检索对象发送。
因此,对于您的问题,您可以随时声明所需的索引:
desired_indices = list(range(38,44)) + list(range(46,48)) + list(range(50,54))
my_input = x[i, :, desired_indices]
(我还更改了变量名中的“输入”,因为它会产生问题)
如何取多个切片的问题经常出现在 SO 上。
如果切片足够规则,您可以重塑阵列,并只取一片。
但更一般地说,您有两种选择:
分别取切片,然后加入它们( np.concatenate
)
构造一个高级索引数组,并应用它。 如果切片都具有相同的长度,您可以使用linspace
或一些广播数学来制作数组。 但如果它们不同,则必须连接一堆arange
。
对于x[i, :, arr]
其中arr
是一个类似np.array([38,39,50,60])
的数组,有一个复杂的因素是它混合了基本索引和高级索引。 众所周知,至少在有经验的 numpy 用户中,这会产生意想不到的形状,切片维度移动到末尾。
x[i][:,arr]
是解决这个问题的一种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.