2017-06-04 4 views
0

Ich würde gerne wissen, wie man Matrix aus Vektor in Schleife auf die einfachste Weise erstellen. Ich habe für einen Zyklus, der Bedingungen enthält (so dass ich die endgültige Form der Matrix nicht kenne), unter denen ich einen Vektor an die Matrix anhängen möchte (er sollte am Anfang leer sein). Ich möchte wie etwas tun:Die einfachste Möglichkeit zum Erstellen von 2D-Matrix in Schleife

import numpy as np 

for i in range(100): 
    vector=np.random.random(10) 
    condition=np.random.choice([True, False]) 
    if (condition): 
     matrix[i,:]=vector 

in Matlab diese super einfach (das geschriebene Beispiel (in Matlab Syntax OFC) funktioniert perfekt). Python hat jedoch viel mehr (zumindest für mich) ein kompliziertes System mit Arrays und Listen. Also, wenn jemand den einfachsten und korrektesten Weg kennt, wie man das in Python macht, geben Sie ein Beispiel. Danke vielmals!

Antwort

0

Sie könnten matrix eine Python-Liste machen und dann .append() verwenden, um vector hinzuzufügen. Dann, nach der Schleife Anruf np.array(matrix)

import numpy as np 

matrix_as_list = [] 

for i in range(100): 
    vector=np.random.random(10) 
    condition=np.random.choice([True, False]) 
    if (condition): 
     matrix_as_list.append(vector) 

matrix = np.array(matrix_as_list) 

Ich bin nicht sicher über Python, aber in MATLAB wäre es schneller, um tatsächlich initialisieren Ihre Matrix eine 100 -by- 10 Matrix zu sein, und dann die nicht benötigten Zeilen löscht danach eher als die Matrix in einer Schleife wachsen zu lassen. Am schnellsten wäre es natürlich, die Lösung nur zu vektorisieren, um überhaupt keine Schleife zu verwenden.

+0

vielen dank! Ich hoffte, dass es eine Lösung gibt, nur um mit Arrays zu arbeiten - nicht um in die Liste zu konvertieren und dann zurück. – Capponero

+0

Könnten Sie auch präziser über "die Lösung vektorisieren, um überhaupt keine Schleife zu verwenden"? Danke – Capponero

+0

Warum nicht Listen verwenden? Meine Lösung konvertiert nur einmal btw – Dan

Verwandte Themen