使用numpy在矩阵中划分一行

Posted

技术标签:

【中文标题】使用numpy在矩阵中划分一行【英文标题】:dividing a row in a matrix using numpy 【发布时间】:2020-09-08 20:54:27 【问题描述】:

我在处理 numpy 数组时遇到了这种奇怪的行为

x = np.array([[0,3,6],
             [1,5,10]])
print(x[1]/3)
x[1]=x[1]/3
print(x[1])

输出如下图:

[0.33333333 1.66666667 3.33333333]
[0 1 3]

为什么不一样?我如何在不四舍五入的情况下将[0.33333333 1.66666667 3.33333333] 分配给x[1]

【问题讨论】:

考虑 x 中元素的类型。划分数组允许将答案转换为另一种类型。重新分配后会发生什么? 【参考方案1】:

Numpy 数组具有固定类型,在创建数组时确定。原始数组的所有元素都具有 int 类型。除法产生一个浮点数组,但是当您将其分配回整数数组时,浮点数需要四舍五入。

要解决此问题,您应该立即从浮点数组开始,例如

x = np.array([[0, 3, 6], [1, 5, 10]], dtype=float)

(为数组中的任何数字添加小数点也可以。)

【讨论】:

那么,在第一次将数组创建为“int”后,有什么方法可以将数组更改为“float”? @PranavKatta 最简单的选择是从现有数组创建一个新数组,例如与x = x.astype(float)。这会将数组复制到一个新数组,但由于无论如何都需要转换数据,这通常不会导致任何额外开销。仅当数据类型的大小匹配时,就地转换才有效 - 有关这种情况,请参阅 In-place type conversion of a NumPy array。

以上是关于使用numpy在矩阵中划分一行的主要内容,如果未能解决你的问题,请参考以下文章

如何在犰狳中按元素划分2个稀疏矩阵?

在opencv中划分两个矩阵

如何将数组划分为段,然后使用python numpy执行段的子段?

如何使用numpy将矩阵与另一个矩阵中的每一行相乘

如何使用opencv C ++将3D矩阵划分为2D矩阵束

按经纬度将城市划分为矩阵