繁体   English   中英

为什么可以将Python vanilla max()用于numpy.ndarray

[英]Why is it possible to use Python vanilla max() to numpy.ndarray

ndarray是numpy中专门定义的数据类型,所以我想知道为什么我可以使用以下内容:

import numpy as np
a = np.array([1,2,3,4])
max(a) --> 4

我假设python将其转换回列表,但我不明白这是如何自动完成的以及python如何“知道”如何将其转换为列表?

另外,这个不起作用:

b = np.array([[1,2,3],[4,5,6]])
max(b)

所以在这种情况下,python显然不知道如何将其转换为列表。 为什么numpy不会自动将多维数组展平为这样的向量:

max(b.flatten(1))

非常感谢提前。

Python函数max不希望仅将列表作为参数,而是接受一个iterable对象,如下文档中所示:

max(iterable[, key])

它根本没有将numpy数组转换为列表,而是使用numpy数组可迭代的事实(如元组,字符串等)。

max函数具有以下参数:

max(iterable[, key=func]) -> value
max(a, b, c, ...[, key=func]) -> value

在numpy数组的情况下,numpy数组被视为可迭代的。 对于你的b,将会发生的事情是b被迭代。 这导致:

>>> list(iter(b))
[array([1, 2, 3]), array([4, 5, 6])]

现在,如果将这两个项目与默认比较函数进行比较,您将得到相同的错误:

>>> c = list(iter(b))
>>> cmp(c[0], c[1])

Numpy不会展平数组,因为迭代器默认会循环遍历行而不是元素。 如果想要更多地控制迭代,可以使用数组迭代器,例如:

numpy.nditer函数。

>>> max(np.nditer(b))
array(6)

.flat属性:

>>> max(b.flat)
6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM