是否有获取 0D numpy 子数组的规范方法?

Is there a canonical way of obtaining a 0D numpy subarray?

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

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

有没有一种干净的方法可以在 idx 处检索 a 的 0D 子数组?

相当于

a[idx + (None,)].squeeze()

但没那么黑?

注意@filippo 的聪明

a[idx][...]

等价。首先,它不适用于对象数组。但更严重的是,它不是 return 一个子数组而是一个新数组:

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

不确定我是否正确理解了您的需求,这看起来够干净吗?

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)

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

b = a[idx+(Ellipsis,)]

我在一台机器上测试,并在平板电脑上写这个,所以不能给出我通常的验证码。

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

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

When an ellipsis (...) is present but has no size (i.e. replaces zero :) the result will still always be an array. A view if no advanced index is present, otherwise a copy.