2017-03-14 4 views
0

Schreiben Sie eine Funktion calc_frac (a, axis = 0), die ein 2-dimensionales numpy Array mit nur Nullen und Einsen akzeptiert und ein Array mit dem Anteil der Einsen in jeder Spalte (if axis = 0) oder zurückgibt in jeder Zeile (wenn Achse = 1).Funktion Numpy/Arrays

Das ist, was ich bisher haben, sind

import numpy as np 
a = np.array([[1,0,1],[1,1,0],[0,1,0]]) 
b = np.zeros((3,1)) 
col_r1 = a[:,0:1] 
col_r2 = a[:,1:2] 
col_r3 = a[:,2:3] 
i=0 
j=0 
k=0 
for i in col_r1: 
    if i >= 1: 
     i = i+1 
     b[0]= i/3 

for k in col_r2: 
    if k >= 1: 
     k=k+1 
     b[1] = k/3 

for f in col_r3: 
    if f >= 1: 
     f=f+1 
     b[2] = f/3 
print(b) 
print(col_r3) 

Hier werden die Probleme, die ich habe:

  1. Wenn Sie die Mutationen b schließlich drucken Sie es b zeigt [2] als 0.6667 statt 0,333. da die Spalte nur 1 Kopie der Nummer 1 haben soll

  2. Ich bin mir nicht sicher, wie ich diesen Code als Funktion in dem oben gezeigten Format in der Frage umschreiben könnte.

  3. Da ich mit numpy nicht vertraut bin, habe ich mich gefragt, ob es einen Weg gibt, einen Code zu schreiben, der die gleiche Funktion ohne Verwendung von for-Schleifen ausführt.

Dank im Voraus

Antwort

1
def calc_frac(a, axis=0): 
    return a.mean(axis=axis) 

Der Schlüssel ist, dass der Mittelwert eines Arrays von Einsen und Nullen der Anteil von 1-en ist.

Verwandte Themen