[英]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.