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)
其中,fn是您的lambda表达式。 numpy数组的添加相当于元素明智的添加,所以这表现得如你所期望的那样。但是,在第二个示例中,您将max用作函数,并且在numpy数组上未定义python builtin max函数。这是因为蟒蛇最大的定义方式是这样的:
def max(x,y):
if x>y:
return x
return y
然而,x>y
是numpy的数组,如果x和y是numpy的阵列,以及if <numpy array>
并没有太大的意义,这是为什么我们得到的错误消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
总之,不被在每个单独的对数字进行要传递到numpy.fromfunction
的功能,而是将矩阵作为一个整体,所产生上面所解释的。 Numpy用于计算元素最大值的方法是numpy.maximum
,因此用numpy.maximum
替换max
,您的代码将按预期工作。
最后一个注释:lambda x,y: max(x,y)
相当于max
,因为两者都表示一个函数,它接受两个参数并返回其最大值。所以,当你重写该行代码,你可以写:
B=numpy.fromfunction(numpy.maximum,(3,3),dtype=int)
感谢您的回答克里斯托弗 – user7182979
是我的荣幸!如果这里的答案解决了您的问题,请将它标记为已接受,如果您不介意:) –