numpy切片总会返回一个数组

时间:2011-05-05 17:55:11

标签: python numpy slice

给定一个numpy数组和一个__getitem__ - 类型的索引,是否有一种惯用的方法来获取数组的相应切片,总是会返回一个数组,而不是一个标量< /强>

有效索引的示例包括:intslice,省略号或上述元组。

说我有这样的数组:

a = np.array([[1,2],[3,4]])

除了a[whatever]返回标量(例如a[whatever])之外,我正在寻找一个在所有情况下等同于a[1,1]的操作。在这些情况下,我希望这种替代操作能够返回单元素数组。

3 个答案:

答案 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])?不要认为有比这更简单/更惯用的方式。