python разделение строк одним элементом - PullRequest
2 голосов
/ 19 апреля 2020

Я читаю книгу «Вычислительная физика - Марк Ньюман». Ниже приведен один из его примеров.

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 ,:] / = div

TypeError: Нет l oop, совпадающий с указанной сигнатурой и кастинг был найден для ufun c true_divide "

Что сделало эту ошибку? Как я могу это исправить?

1 Ответ

1 голос
/ 19 апреля 2020

Это должно исправить:

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, который имеет тип integer. Вы можете найти более подробную информацию по этому вопросу, здесь

В качестве примечания, как правило, лучше не использовать:

from numpy import *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...