我有一个包含整数值的 numpy 数组。如果我将整个矩阵乘以一个浮点数,结果是一个浮点矩阵,但如果我通过 for 循环逐列相乘,它只给出整数部分。
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = A
print("Multiplication as a whole matrix:")
A = 0.5*A
print(A)
for i in range(A.shape[1]):
B[:,i] = 0.5*B[:,i]
print("Multiplication column by column:")
print(B)
如果我只将矩阵的一个元素更改为浮点数(例如 1 到 1.0),两种方法都会给出真实结果。我想知道其根本原因。
A = 0.5*A
更改整个数组。什么时候A.__rmul__(0.5)
被解释器调用,它看到0.5
is a float
从而创建一个新的A
with dtype = float
for i in range(A.shape[1]):
B[:,i] = 0.5*B[:,i]
现在,我们尝试回读B
分段。但即使0.5*B[:, i]
是一个浮点数组,B
还是dtype = int
,所以它投射float
s to int
以适应现有的B
数据结构。
设置“即使矩阵中只有一个元素为浮点数”也会将整个数组设置为dtype = float
,然后投射到int
会停止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)