Nie mogę wymyślić, jak użyć tablicy lub macierzy w sposób, w jaki normalnie użyłbym listy. Chcę utworzyć pustą tablicę (lub macierz), a następnie dodawać do niej jedną kolumnę (lub wiersz) na raz.
W tej chwili jedynym sposobem, aby to zrobić, jest:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Gdyby to była lista, zrobiłbym coś takiego:
list = []
for item in data:
list.append(item)
Czy istnieje sposób na użycie tego rodzaju notacji w przypadku tablic lub macierzy NumPy ?
.empty()
oznacza, że można znaleźć losowe wartości w komórkach, ale tablica jest tworzona szybciej niż np. za pomocą.zeros()
?Tablica NumPy jest bardzo inną strukturą danych niż lista i została zaprojektowana do użycia na różne sposoby. Twoje użycie
hstack
jest potencjalnie bardzo nieefektywne ... za każdym razem, gdy go wywołasz, wszystkie dane z istniejącej tablicy są kopiowane do nowej. (append
Funkcja będzie miała ten sam problem.) Jeśli chcesz budować swoją matrycę po jednej kolumnie na raz, najlepiej jest zachować ją na liście, dopóki nie zostanie ukończona, a dopiero potem przekształcić ją w tablicę.na przykład
item
może być listą, tablicą lub dowolnym iterowalnym, o ile każdyitem
ma taką samą liczbę elementów.W tym konkretnym przypadku (
data
jest to możliwe do wielokrotnego przechowywania kolumny macierzy) możesz po prostu użyć(Należy również pamiętać, że używanie
list
jako nazwy zmiennej prawdopodobnie nie jest dobrą praktyką, ponieważ maskuje typ wbudowany tą nazwą, co może prowadzić do błędów).EDYTOWAĆ:
Jeśli z jakiegoś powodu naprawdę chcesz utworzyć pustą tablicę, możesz po prostu użyć
numpy.array([])
, ale jest to rzadko przydatne!źródło
np.concatenate()
), można użyć:np.empty((0, some_width))
. 0, więc twoja pierwsza tablica nie będzie śmieciami.Aby utworzyć pustą tablicę wielowymiarową w NumPy (np. Tablicę 2D
m*n
do przechowywania macierzy), na wypadek, gdybyś nie wiedział,m
ile wierszy dołączysz i nie przejmujesz się kosztami obliczeniowymi wspomnianymi przez Stephena Simmonsa (a mianowicie ponownym zbudowaniem tablica na każdym dołącz), można wycisnąć do 0 wymiaru, do którego chcesz dołączyć do:X = np.empty(shape=[0, n])
.W ten sposób możesz na przykład użyć (tutaj, o
m = 5
którym zakładamy, że nie wiedzieliśmy podczas tworzenia pustej matrycy, in = 2
):co da ci:
źródło
Dużo się nad tym zastanawiałem, ponieważ musiałem użyć tablicy numpy.array jako zestawu w jednym z moich szkolnych projektów i musiałem zostać zainicjowany pusty ... Nie znalazłem żadnej istotnej odpowiedzi na temat przepełnienia stosu, więc zacząłem doodling czegoś.
Wynik będzie:
Dlatego możesz bezpośrednio zainicjować tablicę np w następujący sposób:
Mam nadzieję, że to pomoże.
źródło
a=np.array([])
wydaje się domyślniefloat64
Możesz użyć funkcji dołączania. Dla rzędów:
Dla kolumn:
EDYCJA
Oczywiście, jak wspomniano w innych odpowiedziach, chyba że wykonujesz pewne przetwarzanie (np. Inwersję) na macierzy / macierzy KAŻDY raz, gdy coś do niej dodasz, po prostu stworzę listę, dołączę do niej, a następnie przekonwertuję na szyk.
źródło
Jeśli nie znasz ostatecznego rozmiaru tablicy, możesz zwiększyć jej rozmiar w następujący sposób:
0
w pierwszym wierszu.numpy.append
jest inną opcją. Wzywanumpy.concatenate
.źródło
Możesz go zastosować do zbudowania dowolnego rodzaju tablicy, np. Zer:
źródło
a= [0] * 5
jest proste rozwiązanieOto kilka obejść, dzięki którym numpys wyglądają bardziej jak Listy
WYJŚCIE: tablica ([2., 24.])
źródło
W zależności od tego, do czego go używasz, może być konieczne określenie typu danych (patrz „dtype” ).
Na przykład, aby utworzyć tablicę 2D o 8-bitowych wartościach (odpowiednią do użycia jako obraz monochromatyczny):
W przypadku obrazu RGB podaj liczbę kanałów kolorów w kształcie:
shape=(H,W,3)
Możesz również rozważyć zainicjowanie zera
numpy.zeros
zamiast zamiastnumpy.empty
. Zobacz notatkę tutaj .źródło
Myślę, że chcesz obsłużyć większość pracy z listami, a następnie użyć wyniku jako macierzy. Może to jest sposób;
źródło
Myślę, że możesz stworzyć pustą tablicę numpy, taką jak:
Ten format jest przydatny, gdy chcesz dołączyć tablicę numpy w pętli.
źródło
Aby utworzyć pustą tablicę NumPy bez określania jej kształtu, należy:
1.
preferowane. bo wiesz, że będziesz używać tego jako numpy.
2)
NumPy konwertuje to później na typ np.ndarray, bez dodatkowych
[]
dimionsion
.źródło