给出一个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
答案 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
当存在省略号(...)但没有大小(即替换为零)时,结果仍将始终为数组。如果没有高级索引,则为视图,否则为副本。