В настоящее время я реализую небольшой конечный элемент sim. используя Python/Numpy, и я ищу эффективный способ создания глобальной матрицы жесткости:Выполнение создания разреженной (жесткости) матрицы
1) Я думаю, что создание разреженной матрицы из матриц жесткости меньшего элемента должно выполняться с использованием coo_matrix()
. Однако могу ли я расширить существующий coo_matrix
, или я должен создать его из окончательных списков i, j и v?
2) В настоящее время я создаю списки i и j из матрицы жесткости элемента меньшего размера, используя списки и конкатенацию их. Есть ли лучший способ создать эти списки?
3) Создание вектора данных: Тот же вопрос, являются ли списки python предпочтительными по сравнению с векторами numpy из-за возможностей легкого расширения?
4) Конечно, я открыт для любых советов :). Спасибо!
Вот небольшой пример моего текущего плана, чтобы сделать глобальную сборку ясно, что я намерен:
import numpy as np
from scipy.sparse import coo_matrix
#2 nodes, 3 dof per node
locations = [0, 6]
nNodes = 2
dof =3
totSize = nNodes * dof
Ke = np.array([[1,1,1, 2,2,2],
[1,1,1, 2,2,2],
[1,1,1, 2,2,2],
[2,2,2, 3,3,3],
[2,2,2, 3,3,3],
[2,2,2, 3,3,3]])
I = []
J = []
#generate rowwise i and j lists:
i = [ idx + u for i in range(totSize) for idx in locations for u in range(dof) ]
j = [ idx + u for idx in locations for u in range(dof) for i in range(totSize) ]
I += i
J += J
Data = Ke.flatten()
cMatrix = coo_matrix((Data, (i,j)),)
Это 'i' на линии, которая вычисляет' j' переписывает в 'i', которая рассчитывалась на линии раньше. – Divakar
@ Дивакар да? Вы имеете в виду «i» в понимании списка? В python 3, понимание не имеет проблемных областей ... –
@ juanpa.arrivillaga А я вижу. Да, я нахожусь на python2.7 и переписываю на 'i' на этом этапе. – Divakar