[英]Numpy array slice using tuple
我已经阅读了切片的numpy文档(尤其是讨论变量数组索引的底部) https://docs.scipy.org/doc/numpy/user/basics.indexing.html
但是我仍然不确定如何执行以下操作:编写一个返回3D索引集或4D索引集然后用于访问数组的方法。 我想为基类编写一种方法,但是从该类派生的类将根据实例化哪个派生类访问3D或4D。
示例代码说明了这一想法:将numpy导入为np
a = np.ones([2,2,2,2])
size = np.shape(a)
print(size)
for i in range(size[0]):
for j in range(size[1]):
for k in range(size[2]):
for p in range(size[3]):
a[i,j,k,p] = i*size[1]*size[2]*size[3] + j*size[2]*size[3] + k*size[3] + p
print(a)
print('compare')
indices = (0,:,0,0)
print(a[0,:,0,0])
print(a[indices])
简而言之,我试图获取一个元组(或其他东西),根据我填充元组的方式,该元组可以进行以下两个访问:
a [i,0,:,1]
a [i,:,1]
slice方法看起来很有希望,但是它似乎需要一个范围,我只想要一个“:”即整个维度。 可变numpy数组维度访问有哪些选项?
In [324]: a = np.arange(8).reshape(2,2,2)
In [325]: a
Out[325]:
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
切片:
In [326]: a[0,:,0]
Out[326]: array([0, 2])
In [327]: idx = (0,slice(None),0) # interpreter converts : into slice object
In [328]: a[idx]
Out[328]: array([0, 2])
In [331]: idx
Out[331]: (0, slice(None, None, None), 0)
In [332]: np.s_[0,:,0] # indexing trick to generate same
Out[332]: (0, slice(None, None, None), 0)
您的代码似乎可以按照您希望的方式工作:
两个例子的原因
(a[i, 0, :, 7], a[i, :, 7])
不起作用是因为7
超出了数组范围。 如果将7
更改为类似于1
范围,则它将返回一个值,我相信这是您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.