2016-06-07 5 views
1

den nächsten Code verwenden wir die Ergebnisse in den Spalten für verschiedene Werte von mneue Spalt erstellen für Daten nach jeder Iteration eines for-Schleife in Python

import numpy as np 
for m in np.arange(0, 4, 1): 
    for n in np.arange(1, 4, 1): 
     coef = 2*m/n 
     print coef 

Die Ergebnissen dieser ist platzieren wollen:

0 
0 
0 
2 
1 
0 
4 
2 
1 
6 
3 
2 

ich möchte diese

0 0 0 
2 1 0 
4 2 1 
6 3 2 

erhalten oder direkt auf die Säule erhalten, die die Summe der Werte der Zeilen ist

0 + 0 + 0 = 0 
2 + 1 + 0 = 3 
4 + 2 + 1 = 7 
6 + 3 + 2 = 11 
+0

Ist das Hausaufgaben? – Merlin

Antwort

2

ein Komma nach dem Druck hinzufügen, so dass wir nicht eine neue Zeile und anderen Druck außerhalb der inneren Schleife hinzufügen, um jede Zeile zu trennen:

import numpy as np 
for m in np.arange(0, 4, 1): 
    for n in np.arange(1, 4, 1): 
     coef = 2*m/n 
     print coef, 
    print 

der Sie:

0 0 0 
2 1 0 
4 2 1 
6 3 2 

Oder als Funktion Druck:

from __future__ import print_function 


import numpy as np 

for m in np.arange(0, 4, 1): 
    print(*(2 * m/n for n in np.arange(1, 4, 1))) 

die Summe zu erhalten, können wir die builtin Summe Funktion ein generator expression in der inneren Schleife verwenden Sie einfach mit:

import numpy as np 

for m in np.arange(0, 4, 1): 
    print(sum(2 * m/n for n in np.arange(1, 4, 1))) 

die Sie:

0 
3 
7 
11 

Für Vollständigkeit, das entspricht print_function Code dem ersten Beispiel end=" " Einstellung würde:

from __future__ import print_function 

import numpy as np 
for m in np.arange(0, 4, 1): 
    for n in np.arange(1, 4, 1): 
     coef = 2*m/n 
     print(coef, end=" ") 
    print() 
1

Wie ich richtig verstanden habe, wollen Sie Erstellen Sie ein neues Array, dessen Spalten wie angegeben sind.

import numpy as np 
a = np.zeros([3,4]) 
for m in np.arange(0, 4, 1): 
    col = [] 
    for n in np.arange(1, 4, 1): 
     coef = int(2*m/n) 
     col.append(coef) 
    a[:, int(m)] = col 

print(a.T) 
1

Was Sie mit einer Schleife tun würde mit range genauso gut funktionieren. Keine Notwendigkeit, numpy zu verwenden.

Aber wenn dies eine Übung zum Lernen numpy ist, würde ich einen anderen Ansatz vorschlagen.

Erstellen Sie ein Array direkt aus den Bereichen. // ist eine Ganzzahldivision.

In [99]: A=2*np.arange(4)[:,None]//np.arange(1,4) 

In [100]: A 
Out[100]: 
array([[0, 0, 0], 
     [2, 1, 0], 
     [4, 2, 1], 
     [6, 3, 2]], dtype=int32) 

Sie über mehrere Spalten mit einem Array-Verfahren summieren können:

In [101]: A.sum(axis=1) 
Out[101]: array([ 0, 3, 7, 11], dtype=int32) 

Um ein schönes Format zu bekommen, ohne Klammern und solche, erstellen eine Reihe Formatierung string:

In [102]: fmt = '%d + %d + %d = %d'    

In [103]: for row in A:       
    print(fmt%(tuple(row)+(row.sum(),))) 
    .....:  
0 + 0 + 0 = 0 
2 + 1 + 0 = 3 
4 + 2 + 1 = 7 
6 + 3 + 2 = 11 

(Die Funktion Druckform ist normal in Python3, und in 2.7)

Ich könnte eine Variation verwendet haben um dies in eine Datei über np.savetxt zu schreiben.

In [104]: A.sum(axis=1,keepdims=True) # sum in column array shape 
Out[104]: 
array([[ 0], 
     [ 3], 
     [ 7], 
     [11]], dtype=int32) 

In [105]: A1 = np.concatenate((A, A.sum(axis=1,keepdims=True)),axis=1) 

In [106]: A1  # the values and sum in one array 
Out[106]: 
array([[ 0, 0, 0, 0], 
     [ 2, 1, 0, 3], 
     [ 4, 2, 1, 7], 
     [ 6, 3, 2, 11]], dtype=int32) 

In [107]: np.savetxt('test.txt',A1,fmt=fmt) 

In [108]: cat test.txt # look at the resulting file 
0 + 0 + 0 = 0 
2 + 1 + 0 = 3 
4 + 2 + 1 = 7 
6 + 3 + 2 = 11 

A python2.7 Version ohne numpy:

>>> for m in range(4): 
...  row = [2*m/n for n in range(1,4)] 
...  fmt = '%d + %d + %d = %d' 
...  print fmt%(tuple(row)+(sum(row),)) 
... 
0 + 0 + 0 = 0 
2 + 1 + 0 = 3 
4 + 2 + 1 = 7 
6 + 3 + 2 = 11 
Verwandte Themen