快速访问具有任意数量维度的Numpy数组中的第一个元素?

时间:2016-04-03 22:30:05

标签: python numpy

我有一个函数,我想快速访问给定Numpy数组的第一个(也称为第零个)元素,它本身可能有任意数量的维度。最快的方法是什么?

我目前正在使用以下内容:

a.reshape(-1)[0]

这可能将多维度数组重新整形为一维数组,并抓住第零个元素,这个元素短,甜,通常很快。但是,我认为这对于某些数组来说效果不佳,例如,一个数组是大数组的转置视图,因为我担心这最终需要创建一个副本,而不仅仅是原始数组的另一个视图,按顺序以正确的顺序获得一切。 (这是对的吗?还是我不必要地担心?)无论如何,感觉这比我真正需要做的更多的工作,所以我想你们中的一些人可能知道通常更快的方式吗?

我考虑过的其他选项是在整个数组上创建一个迭代器并从中只绘制一个元素,或者为每个维创建一个零的向量,并使用它来表示数组。但这些似乎都不是那么好。

3 个答案:

答案 0 :(得分:8)

a.flat[0]

这应该非常快,并且永远不需要副本。 (请注意,a.flatnumpy.flatiter的实例,而不是数组。)

答案 1 :(得分:7)

您可以使用a.item(0);请参阅numpy.ndarray.item上的文档。

此方法的一个可能的缺点是返回值是 Python 数据类型,而不是numpy对象。例如,如果a的数据类型为numpy.uint8,则a.item(0)将为Python整数。如果这是一个问题,a.flat[0]会更好 - 请参阅@ user2357112的回答。

答案 2 :(得分:0)

                            if (dx == 0 && !recyclerView.canScrollHorizontally(1)) {
                                //add here your code
                                recyclerView.removeOnScrollListener(this)//remove this listener to prevent leaks
                            }
                        }
                    })

如果要获取第一个元素:

使用## y -- numpy array of shape (1, Ty)

如果要获取第二个元素:

使用y.shape[0]

来源: https://docs.scipy.org/doc/numpy/reference/generated/numpy.take.html

您还可以使用take进行更复杂的提取(以获取少量元素):

  

numpy.take(a,indexs,axis = None,out = None,mode ='raise')[源代码]   沿轴的数组中的元素。