Python numpy和x27中的lambda函数;函数数组构造函数

Python 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方法

下面代码的最后一行创建矩阵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
方法创建两个数组,一个是每个单元格的值都是该单元格的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)

谢谢你的回答,克里斯托弗米,很高兴!如果此处的答案解决了您的问题,如果您不介意,请将其标记为已接受:)