2024-04-26 20:54:34 发布
网友
给定一个numpy数组和一个__getitem__类型的索引,有没有一种惯用的方法来获得数组的相应部分,总是返回一个数组而不是标量?在
numpy
__getitem__
有效索引的例子包括:一个int,一个slice,上面的一个省略号或元组。在
int
slice
假设我有一个这样的数组:
a = np.array([[1,2],[3,4]])
我在寻找一个在所有情况下都等价于a[whatever]的操作,除非a[whatever]返回标量(例如,a[1,1])。在这些情况下,我希望此替代操作返回单个元素数组。在
a[whatever]
a[1,1]
下面是一个稍微复杂一点的版本,它总是返回原始数组的一个视图(当然,前提是您不执行任何高级索引;这应该由您的有效索引规范来保证):
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?在
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])?别以为有比这更简单/更惯用的方法了。在
np.array(a[whatever])
下面是一个稍微复杂一点的版本,它总是返回原始数组的一个视图(当然,前提是您不执行任何高级索引;这应该由您的有效索引规范来保证):
如果您只想在返回标量的情况下返回单个元素数组,为什么不在切片结果上使用
numpy.atleast_1d
?在例如:
除了
np.array(a[whatever])
?别以为有比这更简单/更惯用的方法了。在相关问题 更多 >
编程相关推荐