我有一个函数,我想快速访问给定Numpy数组的第一个(也称为第零个)元素,它本身可能有任意数量的维度.最快的方法是什么?
我目前正在使用以下内容:
a.reshape(-1)[0]
这将可能多维度的数组重新整形为一维数组,并抓住第零个元素,这个元素短,甜,通常很快.但是,我认为这对某些数组来说效果不佳,例如,一个数组是大数组的转置视图,因为我担心这最终需要创建一个副本而不是原始数组的另一个视图,按顺序以正确的顺序获得一切.(这是对的吗?还是我不必要地担心?)无论如何,感觉这比我真正需要做的更多工作,所以我想你们中的一些人可能知道这样做的速度通常更快?
我考虑过的其他选项是在整个数组上创建一个迭代器,从中只绘制一个元素,或者为每个维创建一个零的向量,并使用它来表示数组.但这些似乎都不是那么好.
a.flat[0]
这应该非常快,永远不需要副本.(注意,这a.flat
是一个实例numpy.flatiter
,而不是数组.)
你可以用a.item(0)
; 请参阅文档numpy.ndarray.item
.
这种方法的一个可能的缺点是返回值是Python数据类型,而不是numpy对象.例如,如果a
有数据类型numpy.uint8
,a.item(0)
将一个Python整数.如果这是一个问题,a.flat[0]
那就更好了 - 请参阅@ user2357112的答案.