Python numpy和x27中的lambda函数;函数数组构造函数
下面代码的最后一行创建矩阵B有什么问题 为什么max函数的使用不同于前一行中的简单表达式i+jPython numpy和x27中的lambda函数;函数数组构造函数,python,numpy,Python,Numpy,下面代码的最后一行创建矩阵B有什么问题 为什么max函数的使用不同于前一行中的简单表达式i+j import numpy print('Version =', numpy.version.version) # = 1.11.1 A=numpy.fromfunction(lambda i,j: i+j, (3,3), dtype=int) B=numpy.fromfunction(lambda i,j: max(i,j),(3,3),dtype=int) Numpy的fromfunction方法
import numpy
print('Version =', numpy.version.version) # = 1.11.1
A=numpy.fromfunction(lambda i,j: i+j, (3,3), dtype=int)
B=numpy.fromfunction(lambda i,j: max(i,j),(3,3),dtype=int)
Numpy的
fromfunction
方法创建两个数组,一个是每个单元格的值都是该单元格的x索引,另一个是每个单元格都是该单元格的y索引。然后应用您传入的函数
在第一次调用函数时,它会执行以下操作:
x=[[0 0 0]
[1 1 1]
[2 2 2]]
y=[[0 1 2]
[0 1 2]
[0 1 2]]
result = fn(x,y)
def max(x,y):
if x>y:
return x
return y
其中fn是lambda函数。numpy数组的加法相当于元素加法,所以这就是您所期望的。但是,在第二个示例中,您使用max作为函数,并且python内置的max函数没有在numpy数组上定义。这是因为python max的定义方式如下:
x=[[0 0 0]
[1 1 1]
[2 2 2]]
y=[[0 1 2]
[0 1 2]
[0 1 2]]
result = fn(x,y)
def max(x,y):
if x>y:
return x
return y
但是,如果x和y都是numpy数组,x>y
是numpy数组,而if
没有多大意义,这就是为什么我们会收到错误消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
简而言之,传递到numpy.fromfunction
的函数不是对每一对数字执行的,而是对如上所述生成的矩阵作为一个整体执行的。Numpy计算元素最大值的方法是Numpy.max
,因此将max
替换为Numpy.max
,代码将按预期工作
最后一点注意:lambda x,y:max(x,y)
相当于max
,因为两者都表示一个函数,该函数接受两个参数并返回它们的最大值。因此,当您重写代码行时,您可以编写:
B=numpy.fromfunction(numpy.maximum,(3,3),dtype=int)
谢谢你的回答,克里斯托弗米,很高兴!如果此处的答案解决了您的问题,如果您不介意,请将其标记为已接受:)