首页 > 解决方案 > python行用一个元素划分

问题描述

我正在阅读“计算物理学 - 马克纽曼”一书。以下是它的一个例子。

from numpy import *

A = array([
    [2, 1, 4, 1],
    [3, 4, -1, -1],
    [1, -4, 1, 5],
    [2, -2, 1, 3]
])

v = array([-4, 3, 9, 7], float)
N = len(v)

for m in range(N):
    div = A[m,m]
    A[m,:] /= div   <-----------(not working)
    v[m] /= div
...

它是反向替换实现的一部分。但是在划分 div(矩阵中行的对角元素)时,它会显示错误。

"A[m,:] /= 格

TypeError:没有找到与指定签名匹配的循环,并且为 ufunc true_divide 找到了强制转换“

是什么造成了这个错误?我该如何解决?

标签: python-3.xnumpy

解决方案


这应该解决它:

import numpy as np

A = np.array([
    [2, 1, 4, 1],
    [3, 4, -1, -1],
    [1, -4, 1, 5],
    [2, -2, 1, 3]
], dtype=np.float)

v = np.array([-4, 3, 9, 7], float)
N = len(v)

for m in range(N):
    div = A[m, m]
    A[m, :] /= div
    v[m] /= div

或者如果你真的想要整数除法:

for m in range(N):
    div = A[m, m]
    A[m, :] = A[m, :] / div
    v[m] /= div

问题在于,在 Python 3 中,/会进行真正的除法,因此它将结果转换为浮点数,并且当您A[m, :] /= div尝试将浮点结果分配给A整数类型时。您可以在此处找到有关此的更多信息

作为旁注,通常最好不要使用:

from numpy import *

推荐阅读