在熟悉numpy
时,我注意到numpy
数组中有一个有趣的行为:
import numpy as np
arr = np.array([1, 2, 3])
scale = lambda x: x * 3
scale(arr) # Gives array([3, 6, 9])
与普通的Python列表相比:
arr = [1, 2, 3]
scale = lambda x: x * 3
scale(arr) # Gives [1, 2, 3, 1, 2, 3, 1, 2, 3]
我很好奇这怎么可能。一个numpy
数组是否覆盖乘法运算符或其他内容?
这是两个不同的对象,当您对它们使用*运算符时,它们的行为会有所不同。
在第一种情况下,生成一个numpy数组。在这种情况下,*运算符被重载以执行乘法。i、 每个元素将乘以3。
在第二种情况下,生成一个列表。在这种情况下,*运算符被视为repetition operator,整个列表重复3次。
代码示例:
结果:
numpy.ndarray
overloads通过定义自己的__mul__
方法,*
运算符。同样,对于+
,-
等,这允许向量运算。关于numpy中的Overriding操作符
你可以学习numpy.arryhere
让我们把重点放在你的lamda函数上
1。numpy数组:
这将从数组中获取每个元素
2。正常列表:
这将完整列表作为x,并将列表本身乘以
相关问题 更多 >
编程相关推荐