2013-12-18 3 views
1

Я пытаюсь заполнить диагональные элементы на матрице 100x100, как показано ниже в коде matlab, поэтому, как дублировать ее в python.В матрице 100 x 100 в python, заполняя диагональные элементы

T=(2*t0*diag(ones(1,100)))-(t0*diag(ones(1,99),1))-(t0*diag(ones(1,99),-1)) 

Так что я знаю, что первые члены РГО заполнит диагонали матрицы со значением 2*t0,

, который я делаю в Python следующим образом:

x = np.zeros((100,100)) 
np.fill_diagonal(x,2*t0) 

но дон Не знаю, как сделать 2-й и 3-й термины, я знаю, что они заполнят значения выше и ниже диагональных элементов со значением -t0, а не все значения диагоналей, но только заполняя верхнее и нижнее значение диагонали - t0, остальные - нули, но я не знаю, как написать для него код python.

Я нашел этот код:

# diagonal with offset from the main diagonal 
diag([1,2,3], k=1) 

даст результат, как:

array([[0, 1, 0, 0], 
[0, 0, 2, 0], 
[0, 0, 0, 3], 
[0, 0, 0, 0]]) 

, но как применить его для большой матрицы, как и в случае моей проблемы? Я работаю в интерактивном python, то есть Anaconda, так что это другие пакеты, которые я могу использовать для своей проблемы?

+5

В будущем ('numpy version 1.10') вы сможете сделать это очень легко с помощью' 'numpy.diagonal' '(http://docs.scipy.org/doc/numpy/reference/generated/ numpy.diagonal.html # numpy.diagonal). К сожалению, будущего пока нет ... – mgilson

+0

Будущее [здесь] (https://stackoverflow.com/a/35022497/1150462) сейчас – xuhdev

ответ

4

Из того, что вы поставляете здесь np.diag, это легко сделать:

a = np.ones((1, 100))[0] 
b = np.ones((1, 99))[0] 
m = np.diag(a, 0) + np.diag(b, -1) + np.diag(b, 1) 

m вот 100x100 трехдиагональная матрица

Update:

Я нашел ссылку here по аналогичной проблеме , посмотрите также.

+0

спасибо луч, ваш ответ был отличной помощью !! – Cliff

+0

@ user3048426 Добро пожаловать. Если это именно то, что вы ищете, подумайте о принятии моего ответа. :) – Ray

Смежные вопросы