总是返回数组的numpy切片

2024-04-26 20:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个numpy数组和一个__getitem__类型的索引,有没有一种惯用的方法来获得数组的相应部分,总是返回一个数组而不是标量?在

有效索引的例子包括:一个int,一个slice,上面的一个省略号或元组。在

假设我有一个这样的数组:

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

我在寻找一个在所有情况下都等价于a[whatever]的操作,除非a[whatever]返回标量(例如,a[1,1])。在这些情况下,我希望此替代操作返回单个元素数组。在


Tags: 方法numpy类型np情况slice数组例子
3条回答

下面是一个稍微复杂一点的版本,它总是返回原始数组的一个视图(当然,前提是您不执行任何高级索引;这应该由您的有效索引规范来保证):

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]

如果您只想在返回标量的情况下返回单个元素数组,为什么不在切片结果上使用numpy.atleast_1d?在

例如:

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])

除了np.array(a[whatever])?别以为有比这更简单/更惯用的方法了。在

相关问题 更多 >