是否有规范的方法来获得0D numpy子阵列?

时间:2017-12-21 07:22:28

标签: python arrays numpy matrix-indexing

给出一个numpy ndarray和一个索引:

a = np.random.randint(0,4,(2,3,4))
idx = (1,1,1)

是否有一种在a处检索idx的0D子阵列的简洁方法?

相当于

的东西
a[idx + (None,)].squeeze()

但不那么讨厌?

请注意@ filippo的聪明才智

a[idx][...]

不等于。首先,它不适用于对象数组。但更严重的是,它不会返回一个子阵列而是一个新阵列:

b = a[idx][...]
b[()] = 7
a[idx] == 7
# False

2 个答案:

答案 0 :(得分:2)

不确定我是否理解你想要什么,这看起来足够干净吗?

In [1]: import numpy as np

In [2]: a = np.random.randint(0,4,(2,3,4))
   ...: idx = (1,1,1)
   ...: 

In [3]: a[idx]
Out[3]: 2

In [4]: a[idx][...]
Out[4]: array(2)

编辑:请注意,这会返回一个副本,而不是同一个数组的0D视图

答案 1 :(得分:2)

b = a[idx+(Ellipsis,)]

我在一台计算机上进行测试并将其写入平板电脑,因此无法提供我常用的验证码。

也许最好的文档解释(或事实陈述)是:

https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html#detailed-notes

  

当存在省略号(...)但没有大小(即替换为零)时,结果仍将始终为数组。如果没有高级索引,则为视图,否则为副本。