Jak dodać wiersze do tablicy numpy?
Mam tablicę A:
A = array([[0, 1, 2], [0, 2, 0]])
Chciałbym dodać wiersze do tej tablicy z innej tablicy X, jeśli pierwszy element każdego wiersza w X spełnia określony warunek.
Tablice Numpy nie mają metody „dołączania”, takiej jak lista, a przynajmniej tak się wydaje.
Gdyby A i X były listami, zrobiłbym tylko:
for i in X:
if i[0] < 3:
A.append(i)
Czy istnieje numpytoniczny sposób na zrobienie odpowiednika?
Dzięki, S ;-)
Odpowiedzi:
Co to jest
X
? Jeśli jest to tablica 2D, w jaki sposób możesz porównać jej wiersz z liczbąi < 3
:?EDYCJA po komentarzu OP:
dodaj do
A
wszystkich wierszy, odX
których pierwszy element< 3
:źródło
A
. Oczywiście w przypadku małego problemu, takiego jak w tej odpowiedzi, nie stanowi to problemu, ale może być bardziej kłopotliwe w przypadku dużych danych.cóż, możesz to zrobić:
źródło
Ponieważ to pytanie było 7 lat wcześniej, w najnowszej wersji, z której korzystam, to numpy w wersji 1.13 i python3, robię to samo z dodaniem wiersza do macierzy, pamiętaj, aby umieścić podwójny nawias na drugim argumencie, w przeciwnym razie spowoduje to błąd wymiaru.
Tutaj dodam macierz A
z rzędem
to samo użycie w
np.r_
Tylko dla kogoś zainteresowanego, jeśli chcesz dodać kolumnę,
array = np.c_[A,np.zeros(#A's row size)]
postępując zgodnie z tym, co zrobiliśmy wcześniej na macierzy A, dodając do niej kolumnę
źródło
Możesz też to zrobić:
źródło
np.concatenate((A,newrow), axis=0)
1.12.1
(iw Pythonie 3) wydaje się, że próba połączenia wektora z macierzą podnosiValueError: all the input arrays must have same number of dimensions
. Wygląda na to, że chce, aby wektor został jawnie przekształcony w wektor kolumnowy lub wierszowy, zanim będzie chciał go połączyć.newrow = [[1,2,3]]
Jeśli po każdym wierszu nie są potrzebne żadne obliczenia, znacznie szybciej jest dodać wiersze w Pythonie, a następnie przekonwertować je na numpy. Oto testy czasu przy użyciu Pythona 3.6 w porównaniu z Numpy 1.14, dodając 100 wierszy, po jednym na raz:
Zatem prostym rozwiązaniem pierwotnego pytania sprzed siedmiu lat jest użycie metody vstack () do dodania nowego wiersza po konwersji wiersza na tablicę numpy. Ale bardziej realistyczne rozwiązanie powinno uwzględniać słabą wydajność vstack w takich okolicznościach. Jeśli nie potrzebujesz przeprowadzać analizy danych na tablicy po każdym dodaniu, lepiej jest buforować nowe wiersze do listy wierszy w Pythonie (tak naprawdę to lista list) i dodawać je jako grupę do tablicy numpy używając vstack () przed wykonaniem jakiejkolwiek analizy danych.
źródło
źródło
Jeśli możesz wykonać konstrukcję w jednej operacji, to coś w rodzaju vstack-with-fantazy-indexing jest dobrym podejściem. Ale jeśli twój stan jest bardziej skomplikowany lub twoje wiersze pojawiają się w locie, możesz chcieć powiększyć tablicę. W rzeczywistości numpytonicznym sposobem zrobienia czegoś takiego - dynamicznego powiększania tablicy - jest dynamiczne powiększanie listy:
Listy są wysoce zoptymalizowane pod kątem tego rodzaju wzorca dostępu; nie masz wygodnego indeksowania wielowymiarowego numpy w formie listy, ale dopóki dodajesz, trudno jest zrobić coś lepszego niż lista tablic wierszy.
źródło
Używam 'np.vstack', który jest szybszy, EX:
źródło
Możesz użyć,
numpy.append()
aby dołączyć wiersz do tablicy numpty i zmienić kształt do macierzy później.źródło