给定一个numpy
数组和一个__getitem__
- 类型的索引,是否有一种惯用的方法来获取数组的相应切片,总是会返回一个数组,而不是一个标量< /强>
有效索引的示例包括:int
,slice
,省略号或上述元组。
说我有这样的数组:
a = np.array([[1,2],[3,4]])
除了a[whatever]
返回标量(例如a[whatever]
)之外,我正在寻找一个在所有情况下等同于a[1,1]
的操作。在这些情况下,我希望这种替代操作能够返回单元素数组。
答案 0 :(得分:5)
如果您只是想在返回标量的情况下返回单元素数组,为什么不在剪切结果上使用numpy.atleast_1d
呢?
E.g:
import numpy as np
x = np.arange(100).reshape(10,10)
print x[0,0]
print np.atleast_1d(x[0,0])
print np.atleast_1d(x[:,:3])
答案 1 :(得分:2)
这是一个稍微复杂的版本,它总是将视图返回到原始数组中(当然,假设您没有进行任何高级索引;这应该由您的有效索引规范保证):
def get(a, item):
if not isinstance(item, tuple):
item = (item,)
if len(item) == a.ndim and all(isinstance(x, int) for x in item):
return a[item + (None,)]
else:
return a[item]
答案 2 :(得分:0)
除了np.array(a[whatever])
?不要认为有比这更简单/更惯用的方式。