J'ai un fichier testforce.dat
qui affiche les valeurs divisées en 9 colonnes et 3 lignes. La première colonne 3 représente:Multiplication de matrices avec sélection de colonnes en alternance
p1 p2 p3 f1 f2 f3 r1 r2 r3
18 5 27 20 21 8 14 12 25
9 26 23 1 4 10 7 16 24
19 22 15 13 17 6 11 2 3
J'ai 100 fichiers de cette façon.
Je veux maintenant calculer pour le fichier force_00000.dat
le vecteur g = [sum(p1*f1), sum(p2*f2), sum(p3*f3)]
mais pour le prochain fichier force_00001.dat
le vecteur doit utiliser d'autres colonnes h = [sum(p1*r1), sum(p2*r2), sum(p3*r3)]
. Pour le moment, j'utilise la fonction glob pour lire mes fichiers dans des tableaux. Il place chaque rangée dans un tableau. Je ne sais pas comment obtenir mon tableau de multiplication alternatif fait et apprécierait des suggestions :)
import numpy as np
import glob
i = 100
for x in range(0,int(i)):
## turns x into a string and adds if necessary "0" to achieve a fixed digit number;
y = str(x).zfill(5)
## the structure of the forcefile is "force_[00000-00099]";
files = sorted(glob.glob('.//results/force/force_%s.dat' % y))
column_names=('#position')
print files
## loads the file data into arrays
arrays=[np.loadtxt(filename) for filename in files]
print arrays
Edit: Je l'ai testé la charge du premier fichier avec:
b=np.array(arrays)
print b.shape
Et je reçois (1,3,9) pour la forme de mon tableau généré.
Edit2: I eu l'idée d'utiliser "usecols", puis multiplier les valeurs souhaitées:
xposition=[np.loadtxt(filename,usecols= (0,1,2)) for filename in files]
xforce1=[np.loadtxt(filename,usecols= (3,4,5)) for filename in files]
print xposition
print xforce1
xp=np.asarray(xposition)
xf1=np.asarray(xforce1)
print xp
g=np.multiply(xp,xf1)
print g
ce a généré le résultat suivant:
[[[ 360. 105. 216.]
[ 9. 104. 230.]
[ 247. 374. 90.]]]
ce qui signifie que j'ai (p11 et f11 étant les valeurs de la première rangée, p21 à partir de la deuxième rangée ...)
[[[p11*f11 p12*f12 p13*f13]
[p21*f21 p22*f22 p23*f23]
[p31*f31 p32*f32 p33*f33]]]
qui ressemble à ce que je suis e pour au moins un fichier. Le g désiré (g1, g2, g3) devrait ressembler à:
p11*f11+p21*f21+p31*f31= g1
p12*f12+p22*f22+p32*f32= g2
p13*f13+p23*f23+p33*f33= g3
Désolé si cela est une question tout à fait novice mais je ne suis pas si familliar python encore :)
Pour la question avec l'alternance valeurs Je pensais à l'aide d'une fonction if qui vérifie si "i" dans la boucle est un nombre pair
Allons charger un fichier d'abord. Si vous obtenez les en-têtes correctement, vous devriez vous retrouver avec un tableau avec 3 lignes et 9 colonnes, c'est-à-dire. forme (3,9), et dtype de flotteur. Avez-vous cela? – hpaulj
ok J'ai encore vérifié: avec >>> b = np.tableau (tableaux) >>> impression b.shape Je reçois (1,3,9) ... –