python - 查找未知形状的 numpy ndarray 的第一个元素

标签 python arrays python-2.7 numpy

<分区>

如果您不知道数组的形状,是否有一种简单的方法可以提取 ndarray 的第一项?

例如。给定以下数组:

arr = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]]])

>>> [[[ 1  2  3  4]
      [ 5  6  7  8]
      [ 9 10 11 12]]]

我想得到 1 而不假设我知道这个数组的形状是 1*3*4。

我也对最小化解决方案的内存和 CPU 要求感兴趣。

最佳答案

您可以使用 .ravel()获得 ndarray 的平面 View ,然后使用 [0] 将其链接以提取第一个元素,就像这样 -

arr.ravel()[0]

请注意.flatten()会创建一个副本,所以就内存而言可能不是一个好主意,即使它仍然会给你正确的结果。

检查操作是否正在创建copyview 的一种方法是使用np.may_share_memory 检查内存共享标志。 , 像这样 -

In [15]: np.may_share_memory(arr.flatten(),arr)
Out[15]: False # Not sharing memory means a copy

In [16]: np.may_share_memory(arr.ravel(),arr)
Out[16]: True # Sharing memory means a view

看来,也可以用.flat获取 View 。


似乎在 np.take 中有一个优雅的替代方案-

np.take(arr,0) # Input array is arr, 0 is the index position

关于python - 查找未知形状的 numpy ndarray 的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022569/

相关文章:

javascript - 为什么JS的日期会这样呢?

c - 指针如何获取变量、数组、指针、结构的地址

python - 以 4k (3840*2160) 分辨率缩放 Tkinter GUI?

python - 多少私有(private)变量太多了?封装类?类实践?

python - 如何测试 AVL 树的自定义实现

java - 如何存储多个字节数组

python - 使用tickinterval的缩放小部件的问题

python - 如何将当前日期分配给 odoo v8 中的日期字段?

Python:将 ctypes_ubyte 数组转换为字符串

python - 将二进制转换为数字列表 Python