当前位置:   article > 正文

python Numpy运算遇到的问题及解决方法_deprecationwarning: numpy will stop allowing conve

deprecationwarning: numpy will stop allowing conversion of out-of-bound pyth

今天写代码的时候遇到来一个问题,

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

输出1:

[[0 0]
 [0 0]
 [0 0]
 [0 0]
 [0 0]]
  • 1
  • 2
  • 3
  • 4
  • 5

输出2:

[[0.46415094 0.55430712]
 [0.40591966 0.27972028]
 [0.47136564 0.37901861]
 [0.15298088 0.6374502 ]
 [0.28714676 0.60983607]]
  • 1
  • 2
  • 3
  • 4
  • 5

上面的代码的输出结果一直是5*2维的元素都是0的矩阵。但是注释的那条语句和上面的for循环应该表达的是同一个意思,结果却不一样。

问题的原因在于,由于w定义的是int类型的矩阵,在for循环中,对矩阵w的单个元素操作时,涉及强制类型转化,会将等号右边的结果转化为int型,再加上结果都是小于1的数,导致结果都变成0。

而注释的那条语句是numpy新开辟了一个矩阵,之后再将结果赋值给w,所以结果是正确的。那条语句就相当于:

c = w * tmp1 / tmp2   
w = c
  • 1
  • 2

所以解决办法可以将w定义为float类型,再用for循环,或者是直接使用注释的那条语句。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/611087
推荐阅读
  

闽ICP备14008679号