Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取多维numpy数组第一个元素的pythonic方法_Python_Numpy - Fatal编程技术网

获取多维numpy数组第一个元素的pythonic方法

获取多维numpy数组第一个元素的pythonic方法,python,numpy,Python,Numpy,我正在寻找一种简单的pythonic方法来获取numpy数组的第一个元素,不管它的维度如何。例如: a = np.identity(3) a.item(0) # 1.0 对于[1,2,3,4],这将是1 对于[[3,2,4],[4,5,6]它将是3 有没有一种简单的python方法可以做到这一点?使用直接索引: arr[(0,) * arr.ndim] 普通索引表达式中的逗号构成元组。您还可以传入手动构造的元组 您可以通过以下方式获得相同的结果: 另一方面,使用非常诱人的方法并不总是安全的r

我正在寻找一种简单的pythonic方法来获取numpy数组的第一个元素,不管它的维度如何。例如:

a = np.identity(3)
a.item(0)
# 1.0
对于
[1,2,3,4]
,这将是1

对于
[[3,2,4],[4,5,6]
它将是3

有没有一种简单的python方法可以做到这一点?

使用直接索引:

arr[(0,) * arr.ndim]
普通索引表达式中的逗号构成元组。您还可以传入手动构造的元组

您可以通过以下方式获得相同的结果:

另一方面,使用非常诱人的方法并不总是安全的
ravel
通常会返回一个视图,但是如果您的数组是非连续的,它会复制整个视图

一个相对便宜的解决方案是

arr.flat[0]
是一个可索引迭代器。它不会复制您的数据。

使用直接索引:

arr[(0,) * arr.ndim]
普通索引表达式中的逗号构成元组。您还可以传入手动构造的元组

您可以通过以下方式获得相同的结果:

另一方面,使用非常诱人的方法并不总是安全的
ravel
通常会返回一个视图,但是如果您的数组是非连续的,它会复制整个视图

一个相对便宜的解决方案是

arr.flat[0]

是一个可索引迭代器。它不会复制您的数据。

请考虑使用
.item
,例如:

a = np.identity(3)
a.item(0)
# 1.0
但请注意,与常规索引不同,
.item
努力返回本机Python对象,因此,例如,
np.uint8
将作为纯整数返回

如果这是可以接受的,那么这种方法似乎比其他方法快一点:

timeit(lambda:a.flat[0])
# 0.3602013469208032
timeit(lambda:a[a.ndim*(0,)])
# 0.3502263119444251
timeit(lambda:a.item(0))
# 0.2366882530041039

考虑使用
.item
,例如:

a = np.identity(3)
a.item(0)
# 1.0
但请注意,与常规索引不同,
.item
努力返回本机Python对象,因此,例如,
np.uint8
将作为纯整数返回

如果这是可以接受的,那么这种方法似乎比其他方法快一点:

timeit(lambda:a.flat[0])
# 0.3602013469208032
timeit(lambda:a[a.ndim*(0,)])
# 0.3502263119444251
timeit(lambda:a.item(0))
# 0.2366882530041039

arr.ravel()[0]
,基本上将其展平并访问第一项。@cs95。这是我的第一个想法,但如果数组不连续,它可以创建整个对象的副本。
arr.flat[0]
应该足够了。
arr.ravel()[0]
,基本上是将其展平并访问第一项。@cs95。这是我的第一个想法,但如果数组不连续,它可以创建整个对象的副本。
arr.flat[0]
应该足够了。
np.unravel_index(0,arr.shape)
是创建n-d索引的另一种方法。@hpaulj。谢谢补充。我还发现了
flat
np。解开索引(0,arr.shape)
是另一种创建n-d索引的方法。@hpaulj。谢谢补充。我还发现
flat