首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用元组的Numpy数组片

使用元组的Numpy数组片
EN

Stack Overflow用户
提问于 2018-05-23 17:38:22
回答 2查看 4.3K关注 0票数 3

我读过关于切片的numpy文档(特别是讨论变量数组索引的底部) https://docs.scipy.org/doc/numpy/user/basics.indexing.html

但我仍然不确定如何做以下工作:编写一个方法,返回一组3D索引,或者一组4D索引,然后用于访问数组。我想为基类编写一个方法,但是从它派生的类可以访问3D或4D,这取决于实例化了哪个派生类。

演示思想的示例代码:将numpy导入为np

代码语言:javascript
复制
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])

简而言之,我试图获得一个元组(或其他东西),根据我填充元组的方式,可以使用该元组进行以下两种访问:

ai,0,:,1

ai,:,1

切片方法看起来很有前途,但它似乎需要一个范围,我只想要一个":“,即整个维度。对于变量numpy数组维度访问,有哪些选项?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-23 18:43:17

代码语言:javascript
复制
In [324]: a = np.arange(8).reshape(2,2,2)
In [325]: a
Out[325]: 
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

切片:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2018-05-23 17:52:48

您的代码似乎按照您希望使用:的方式工作。这两个例子的原因

代码语言:javascript
复制
(a[i, 0, :, 7], a[i, :, 7])

不工作是因为7超出了数组的范围。如果您将7更改为类似于1的内容,那么它将返回一个值,我相信这就是您要寻找的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50494388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档