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
)匹配。如果您想要浮动,请不要使用它。感谢您的快速响应,谢谢!谢谢大家的快速回复,谢谢!