参见英文答案 > Parameters to numpy’s fromfunction 4个
创建矩阵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)
其中fn是你的lambda函数. numpy数组的添加等同于元素添加,因此这表现得如你所料.但是,在第二个示例中,您使用max作为函数,并且未在numpy数组上定义python builtin max函数.这是因为定义python max的方式是这样的:
def max(x,y):
if x>y:
return x
return y
然而,如果x和y都是numpy数组,并且如果< numpy array> ;,则x> y是numpy数组.没有多大意义,这就是我们收到错误消息的原因:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
简而言之,您传递给numpy.from函数的函数不会在每对数字上执行,而是作为一个整体的矩阵执行,如上所述生成. Numpy的计算元素最大值的方法是numpy.maximum,所以用numpy.maximum替换max,你的代码将按预期工作.
最后一点:lambda x,y:max(x,y)等价于max,因为两者都代表一个带两个参数并返回其最大值的函数.所以当你重写代码的那一行时,你可以写:
B=numpy.fromfunction(numpy.maximum,(3,3),dtype=int)
标签:python,numpy 来源: https://codeday.me/bug/20190627/1309201.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。