使用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在矩阵中划分一行的主要内容,如果未能解决你的问题,请参考以下文章