赞
踩
今天写代码的时候遇到来一个问题,
import numpy as np tmp1 = np.array([[123 , 74], [ 96 , 40], [107 , 56], [ 34 , 96], [ 63 , 93]]) tmp2 = np.array([[ 265 , 267], [ 473 , 429], [ 681 , 591], [ 889 ,753], [1097 ,915]]) w = np.array([[1,2], [2,3], [3,4], [4,5], [5,6]]) # 输出1 for i in range(5): for j in range(2): w[i,j] = w[i,j] * tmp1[i,j] / tmp2[i,j] # w = w * tmp1 / tmp2 # 输出2 print(w)
输出1:
[[0 0]
[0 0]
[0 0]
[0 0]
[0 0]]
输出2:
[[0.46415094 0.55430712]
[0.40591966 0.27972028]
[0.47136564 0.37901861]
[0.15298088 0.6374502 ]
[0.28714676 0.60983607]]
上面的代码的输出结果一直是5*2维的元素都是0的矩阵。但是注释的那条语句和上面的for循环应该表达的是同一个意思,结果却不一样。
问题的原因在于,由于w定义的是int类型的矩阵,在for循环中,对矩阵w的单个元素操作时,涉及强制类型转化,会将等号右边的结果转化为int型,再加上结果都是小于1的数,导致结果都变成0。
而注释的那条语句是numpy新开辟了一个矩阵,之后再将结果赋值给w,所以结果是正确的。那条语句就相当于:
c = w * tmp1 / tmp2
w = c
所以解决办法可以将w定义为float类型,再用for循环,或者是直接使用注释的那条语句。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。