是否有获取 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.
给定一个 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.