Hé donc je travaille sur ce code pour une analyse matérielle. J'ai une matrice générée pour chaque couche du matériau et je veux sauvegarder chacune de ces matrices comme leur propre élément. La façon dont je faisais ceci était de le sauvegarder dans un dictionnaire. Je forme alors une matrice en additionnant toutes les valeurs du dictionnaire. Maintenant, je fais cela pour trois conditions différentes qui me laisse avec 3 matrices: A, B et D. Je veux faire une matrice de tous ces éléments de sorte qu'il ressemble à:Matrice de matrices en python
| A B | | B D |
Cependant je ne peux pas l'obtenir pour imprimer correctement comme il dit toujours matrice: alors une des matrices telles que A. Il imprime la deuxième matrice, B, sur la troisième ligne où A a fini au lieu d'être à côté de A. Je dois également effectuer des opérations futures sur cette matrice massive donc je me demande quelle serait la meilleure façon de procéder. Ceci est une partie de mon code:
Qbars = {}
for i in plies:
Qbar11 = Q11 * math.cos(float(thetas[j]))**4 + Q22 *math.sin(float(thetas[j]))**4 + \
2 * (Q12 + 2 * Q66) * math.sin(float(thetas[j]))**2 * math.cos(float(thetas[j]))**2
Qbar22 = Q11 * math.sin(float(thetas[j]))**4 + Q22 *math.cos(float(thetas[j]))**4 + \
2 * (Q12 + 2 * Q66) * math.sin(float(thetas[j]))**2 * math.cos(float(thetas[j]))**2
Qbar12 = (Q11 + Q22 - 4 * Q66) * math.sin(float(thetas[j]))**2 * \
math.cos(float(thetas[j]))**2 + Q12 * (math.cos(float(thetas[j]))**4 + \
math.sin(float(thetas[j]))**4)
Qbar66 = (Q11 + Q22 - 2 * Q12 - 2 * Q66) * math.sin(float(thetas[j]))**2 * \
math.cos(float(thetas[j])) **2 + Q66 * (math.sin(float(thetas[j]))**4 + \
math.cos(float(thetas[j]))**4)
Qbar16 = (Q11 - Q12 - 2 * Q66) * math.cos(float(thetas[j]))**3 * \
math.sin(float(thetas[j])) - (Q22 - Q12 - 2 * Q66) * math.cos(float(thetas[j])) * \
math.sin(float(thetas[j]))**3
Qbar26 = (Q11 - Q12 - 2 * Q66) * math.cos(float(thetas[j])) * \
math.sin(float(thetas[j]))**3 - (Q22 - Q12 - 2 * Q66) * \
math.cos(float(thetas[j]))**3 * math.sin(float(thetas[j]))
Qbar = np.matrix ([[Qbar11, Qbar12, Qbar16], [Qbar12, Qbar22, Qbar26], \
[Qbar16, Qbar26, Qbar66]])
Qbars[i] = Qbar
if len(thetas) == 1:
j = 0
else:
j = j + 1
k=0
Alist = {}
for i in plies:
Alist[i] = Qbars[i].dot(h[k])
if len(h) == 1:
k = 0
else:
k = k + 1
A = sum(Alist.values())
ABD = ([A, B],[B, D])
print ABD
L'une des opérations suivantes que je compte effectuer serait de multiplier la matrice par un réseau de 6x1 qui ressemblerait comme:
| Nx | | A A A B B B | | Ny | | A A A B B B | | Nxy| | A A A B B B | ------ * ---------------- | Mx | | B B B D D D | | My | | B B B D D D | | Mxy| | B B B D D D |
Quelle serait la meilleure façon de faire cela?
EDIT: J'ai fait ce code plus court pour reproduire ce que j'ai affaire, je ne pouvais pas penser à la façon de le rendre encore plus petit.
import os
import numpy as np
import math
os.system('cls')
ang = raw_input("ENTER 0 (SPACE) 45 ")
thetas = [int(i) for i in ang.split()]
x = 40
h = [3, 5]
y = [1,2]
j = 0
Qbars = {}
for i in y:
theta = [thetas[j] * math.pi/180]
Q = math.sin(float(thetas[j]))
Qbar = np.matrix ([[Q, Q, Q], [Q, Q, Q], [Q, Q, Q]])
Qbars[i] = Qbar
if len(thetas) == 1:
j = 0
else:
j = j + 1
print Qbars
k=0
Alist = {}
for i in y:
Alist[i] = Qbars[i].dot(h[k])
if len(h) == 1:
k = 0
else:
k = k + 1
A = sum(Alist.values())
AAAA = ([A, A], [A, A])
print AAAA
test = raw_input("Press ENTER to close")
Je pense que vous devez sortir un extrait de code qui peut être exécuté, qui montre le problème auquel vous faites face. Il se lit comme la majorité de ce code ne concerne pas la question –
Pour développer le commentaire d'Andy, veuillez lire [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) Si vous avez besoin de pointeurs sur la façon de le faire. – Taelsin
Post EDITED avec un programme plus court qui peut être exécuté pour reproduire mon problème! – Azyru