Python整数和浮点乘法错误
这个问题似乎很愚蠢,但我不能把它答对。输出Python整数和浮点乘法错误,python,numpy,integer,multiplication,Python,Numpy,Integer,Multiplication,这个问题似乎很愚蠢,但我不能把它答对。输出cm1应该是浮点数,但我只得到0和1 import numpy as np import scipy.spatial.distance sim = scipy.spatial.distance.cosine a = [2, 3, 1] b = [3, 1, 2] c = [1, 2, 6] cm0 = np.array([a,b,c]) ca, cb, cc = 0.9, 0.7, 0.4 cr = np.array([ca, cb, cc]) cm
cm1
应该是浮点数,但我只得到0和1
import numpy as np
import scipy.spatial.distance
sim = scipy.spatial.distance.cosine
a = [2, 3, 1]
b = [3, 1, 2]
c = [1, 2, 6]
cm0 = np.array([a,b,c])
ca, cb, cc = 0.9, 0.7, 0.4
cr = np.array([ca, cb, cc])
cm1 = np.empty_like(cm0)
for i in range(3):
for j in range(3):
cm1[i,j] = cm0[i,j] * cr[i] * cr[j]
print(cm1)
我得到:
[[1 1 0]
[1 0 0]
[0 0 0]]
正如@hpaulj在评论部分所说的,问题在于使用
空\u like
,它将保留cm0
dtype
,要解决这个问题,请尝试:
cm1 = np.empty_like(cm0, dtype=float)
正如@hpaulj在评论部分所说的,问题在于使用
空\u like
,它将保留cm0
dtype
,要解决这个问题,请尝试:
cm1 = np.empty_like(cm0, dtype=float)
默认情况下,按照注释中的建议,指定numpy数组的empty_like()
。在您的情况下,cm0
是整数类型
empty\u like
函数接受多个参数,其中一个参数是dtype
。将dtype
设置为float
可以解决以下问题:
cm1 = np.empty_like(cm0, dtype=float)
此外,Python还会在需要时截断小数点处的浮点数。在您的情况下,每次执行乘法都会产生一个介于1.89
和0.36
之间的数字,因此,根据注释中的建议,对结果进行地板处理将分别导致给定numpy数组的0
和1
的值。在您的情况下,cm0
是整数类型
empty\u like
函数接受多个参数,其中一个参数是dtype
。将dtype
设置为float
可以解决以下问题:
cm1 = np.empty_like(cm0, dtype=float)
此外,Python还会在需要时截断小数点处的浮点数。在您的情况下,每次乘法都会产生一个介于
1.89
和0.36
之间的数字,因此将结果叠加在一起将分别产生0
s和1
s。empy\u like
匹配cm0
dtype(int
)。如果需要浮动,请不要使用它。empy_like
与cm0
dtype(int
)匹配。如果您想要浮动,请不要使用它。感谢您的快速响应,谢谢!谢谢大家的快速回复,谢谢!