2017-05-02 4 views
0

Ich habe ein Array, dem ich 1 zu der letzten Spalte der ersten 16 Zeilen hinzufügen möchte und 0 zu der letzten Spalte der Zeilen von 17 bis 27. Ich suchte überall jedoch Spaltung scheint um nur zu arbeiten, wenn wir das Array in gerade Teile teilen wollen, wenn ich das Array in einer bestimmten Zeile in zwei kleinere Arrays schneiden könnte, wäre es einfach, weil ich nur 1 und 0 anhängen würde, als die Arrays wieder zusammen zu bringen.Python-Array-Manipulation, Spaltung, Löschen

Eine weitere Möglichkeit zu hart Code wäre, wo die spezifischen Zahlen, die durch die Indizierung gehen sollte, aber das scheint ein wenig kompliziert

offen, ich habe keine mehr Ideen für sie, hier sind die Arrays für die visuelle Darstellung der Problem (mit verkürztem Zeilen):

[[0.133987 0.359897 0.000000 0.527855 0.764706 0.212121] 
[0.301506 0.407752 0.013970 0.553386 0.830450 0.272727] 
[0.414438 0.415456 0.023283 0.597853 0.833910 0.333333] 
[0.434815 0.415844 0.046566 0.604616 0.837370 0.363636] 
[0.436664 0.500333 0.093132 0.607321 0.868512 0.366667] 
[0.447560 0.559649 0.098952 0.626934 0.882353 0.393939]] 

Ich mag es wäre zu haben wie so: `

[[0.133987 0.359897 0.000000 0.527855 0.764706 0.212121 1] 
[0.301506 0.407752 0.013970 0.553386 0.830450 0.272727 1] 
[0.414438 0.415456 0.023283 0.597853 0.833910 0.333333 1] 
[0.434815 0.415844 0.046566 0.604616 0.837370 0.363636 1] 
[0.436664 0.500333 0.093132 0.607321 0.868512 0.366667 0] 
[0.447560 0.559649 0.098952 0.626934 0.882353 0.393939 0]] 
+1

Haben Sie ein Array, eine Liste von Listen oder ein numpy Array? Jeder hat seine eigenen Lösungen. – Evert

+1

Sie beschreiben Ihre Versuche, aber es kann hilfreich sein, den tatsächlichen Code Ihres (besten) Versuchs zu sehen. – Evert

+0

es ist ein numpy Array, ich habe nichts versucht, weil ich keine Methode dafür gefunden habe, also weiß ich nicht einmal wo ich anfangen soll – Dantuzzo

Antwort

2

es ist wahrscheinlich ein sauberer effizienter um das zu tun, aber ich denke, das ist es, wonach Sie suchen.

import numpy as np 

data = np.array([[0.133987, 0.359897, 0.000000, 0.527855, 0.764706, 0.212121], [0.301506, 0.407752, 0.013970, 0.553386, 0.830450, 0.272727], [0.414438, 0.415456, 0.023283, 0.597853, 0.833910, 0.333333], [0.434815, 0.415844, 0.046566, 0.604616, 0.837370, 0.363636], [0.436664, 0.500333, 0.093132, 0.607321, 0.868512, 0.366667], [0.447560, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939]]) 

extra = [] 
for i in range(len(data)): 
    if i < 3: 
     extra.append([1]) 
    else: 
     extra.append([0]) 

extra = np.array(extra) 

result = np.hstack([data, extra]) 

print(result) 

was

[[ 0.133987 0.359897 0.  0.527855 0.764706 0.212121 1.  ] 
[ 0.301506 0.407752 0.01397 0.553386 0.83045 0.272727 1.  ] 
[ 0.414438 0.415456 0.023283 0.597853 0.83391 0.333333 1.  ] 
[ 0.434815 0.415844 0.046566 0.604616 0.83737 0.363636 0.  ] 
[ 0.436664 0.500333 0.093132 0.607321 0.868512 0.366667 0.  ] 
[ 0.44756 0.559649 0.098952 0.626934 0.882353 0.393939 0.  ]] 
+0

'extra = [[int (i

+0

netter Dank für das Verständnis der Liste. – Aklys

0

Gerade die letzte Spalte machen und verketten sie:

arr = np.random.random(size=(27,6)) 
flag = [0]*16 + [1]*11 
flag = np.array([flag]) 
arr_ = np.concatenate([arr, flag.T], axis=1) 

Die Elemente eines numpy Array muss einheitlich dtypes haben, so dass Sie tatsächlich 1. bekommen und 0. in der letzten Spalte

1

Hier ist eine gekürzte Version, die eine Eingabe mit 4 Zeilen nimmt undhinzufügtzu den ersten 2 Zeilen und 0 zu den restlichen Zeilen. Sie müssten die Nummern nur an Ihre Anforderungen anpassen.

v = [[0.133987, 0.359897, 0.000000, 0.527855, 0.764706, 0.212121], 
    [0.301506, 0.407752, 0.013970, 0.553386, 0.830450, 0.272727], 
    [0.414438, 0.415456, 0.023283, 0.597853, 0.833910, 0.333333], 
    [0.447560, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939]] 

print('before **********') 
for line in v: 
print(line) 

for i, x in enumerate(v): 
    if i < 2: 
     x.append(1) # did you want ints here or floats to be consistent? 
    else: 
     x.append(0) 

print('after **********') 
for line in v: 
    print(line) 

Ausgang:

before ********** 
[0.133987, 0.359897, 0.0, 0.527855, 0.764706, 0.212121] 
[0.301506, 0.407752, 0.01397, 0.553386, 0.83045, 0.272727] 
[0.414438, 0.415456, 0.023283, 0.597853, 0.83391, 0.333333] 
[0.44756, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939] 
after ********** 
[0.133987, 0.359897, 0.0, 0.527855, 0.764706, 0.212121, 1] 
[0.301506, 0.407752, 0.01397, 0.553386, 0.83045, 0.272727, 1] 
[0.414438, 0.415456, 0.023283, 0.597853, 0.83391, 0.333333, 0] 
[0.44756, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939, 0] 

Sie könnten auch die append Zeile

x.append(1 if i < 2 else 0) 

verkürzen Wenn Sie dies wünschen.

Verwandte Themen