Python 3 numpy对矩阵使用整数除法,对向量使用正则除法?

Python 3 numpy对矩阵使用整数除法,对向量使用正则除法?,python,python-3.x,numpy,division,integer-division,Python,Python 3.x,Numpy,Division,Integer Division,运行以下代码时: 从平台导入python\u版本 打印(python_version()) 将numpy作为np导入 x=np.数组([[1,2,3],[4,5,6],[7,8,9]) x[1,:]=x[1,:]/5 打印(x) y=np.数组([1,2,3]) y=y/5 打印(y) 我得到以下输出: 3.8.6 [[1 2 3] [0 1 1] [7 8 9]] [0.2 0.4 0.6] 为什么numpy/python在将矩阵中的行除以标量时使用整数除法,而使用正则除法将单行除法?

运行以下代码时:

从平台导入python\u版本
打印(python_version())
将numpy作为np导入
x=np.数组([[1,2,3],[4,5,6],[7,8,9])
x[1,:]=x[1,:]/5
打印(x)
y=np.数组([1,2,3])
y=y/5
打印(y)
我得到以下输出:

3.8.6
[[1 2 3]
 [0 1 1]
 [7 8 9]]
[0.2 0.4 0.6]

为什么numpy/python在将矩阵中的行除以标量时使用整数除法,而使用正则除法将单行除法?我以为numpy 3中的“/”除法总是规则的?

这里的诀窍是:

x[1,:]=x[1,:]/5
根据
dtype
的numpy文档:

numpy数组是同构的,包含由dtype对象描述的元素

因此,当手动分配行时,它会考虑x矩阵的
dtype
,它的类型是
dtype('int64')

如果尝试手动将元素分配给
y
数组,也会发生同样的情况:

y=np.array([1,2,3])
y[1]=0.5
打印(y)
#这将打印数组([1,0,3])
为什么numpy/python在将矩阵中的行除以标量时使用整数除法,而使用正则除法将单行除法

因此,它是关于强制执行
np.array
本身的同质
dtype
,而不是
在矩阵中划分一行,如下所示:

x[1]/5
>>>数组([0.8,1,1.2])
为什么numpy/python在将矩阵中的行除以标量时使用整数除法

事实并非如此-您看到的症状是由于作业造成的

>>> x = np.array([[1,2,3],[4,5,6],[7,8,9]])
除以整数生成一个浮点数组

>>> z = x[1,:] / 5
>>> z
array([0.8, 1. , 1.2])
但将该数组分配给整数数组的一个片段会导致数据类型转换

>>> x[1,:] = z
>>> x
array([[1, 2, 3],
       [0, 1, 1],
       [7, 8, 9]])
>>> z.dtype
dtype('float64')
>>> x.dtype
dtype('int32')
>>>

文件中提到了这一点-

请注意,如果将较高的类型分配给较低的类型(如浮点型分配给整数),甚至是异常(将复数型分配给浮点型或整数),则分配可能会导致更改:


“为什么numpy/python在对矩阵中的行进行除法时使用整数除法”-提示:不使用。请使用
x=np.array([[1,2,3],[4,5,6],[7,8,9],[dtype=float])试试。
。相关:@第二次世界大战,嗯,我想说,这相当混淆了原因。有人可能会认为结果是浮点,因为它将浮点除以int.Numpy文档: