문제

Numpy를 사용하여 Python에서 TDMA를 구현하고 있습니다. 트리 다이어 제 날 매트릭스는 3 개의 어레이로 저장됩니다.

a = array([...])
b = array([...])
c = array([...])

계산하고 싶습니다 alpha-효율적으로 코호드. 알고리즘은 다음과 같습니다.

# n = size of the given matrix - 1
alpha = zeros(n)
alpha[0] = b[0] / c[0]
for i in range(n-1):
    alpha[i+1] = b[i] / (c[i] - a[i] * alpha[i])

그러나 이것은 파이썬의 경우 효율적이지 않습니다. for 고리. 내가 원하는 것은이 접근법과 같은 것입니다.

# n = size of the given matrix - 1
alpha = zeros(n)
alpha[0] = b[0] / c[0]
alpha[1:] = b[1:] / (c[1:] - a[1:] * alpha[:-1])

이 후자의 경우 Numpy가 Temprorary Array에 마지막 표현식의 오른쪽 부분을 저장 한 다음 요소에 대한 참조를 할당하기 때문에 결과가 잘못되었습니다. alpha[1:]. 그러므로 a[1:] * alpha[:-1] 제로의 배열 일뿐입니다.

Numpy에게 다음의 가치를 사용하도록 지시하는 방법이 있습니까? alpha 내부 루프 내의 이전 단계에서 계산 되었습니까?

감사.

도움이 되었습니까?

해결책 2

분명히 C 또는 C를 사용하지 않고 파이썬 에서이 작업을 수행 할 방법이 없습니다. 피티닉 변형.

다른 팁

Tridiagonal 시스템을 해결하고 싶은 경우 solve_banded() 안에 numpy.linalg. 그것이 당신이 찾고있는 것인지 확실하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top