Numpy tablice strukturyzowane nazwali kolumny:
import numpy as np
a=range(100)
A = np.array(zip(*[iter(a)]*2),dtype=[('C1','int32'),('C2','int64')])
print(A.dtype)
# [('C1', '<i4'), ('C2', '<i8')]
można uzyskać dostęp do kolumn o nazwie tak:
print(A['C1'])
# [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
# 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98]
pamiętać, że korzystanie np.array
z zip
powoduje numpy zbudować tablicę z tymczasowym lista krotek. Listy krotek Pythona zużywają o wiele więcej pamięci niż równoważne tablice NumPy. Więc jeśli twoja macierz jest bardzo duża, możesz nie chcieć używać zip
.
Zamiast tego, biorąc pod uwagę macierz NumPy A
, można użyć ravel()
aby A
1D tablicy, a następnie użyj view
aby włączyć go do zorganizowanego tablicy, a następnie użyć astype
przekonwertować kolumn do żądanego typu:
a = range(100)
A = array(a).reshape(len(a)/2, 2)
A = A.ravel().view([('col1','i8'),('col2','i8'),]).astype([('col1','i4'),('col2','i8'),])
print(A[:5])
# array([(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)],
# dtype=[('col1', '<i4'), ('col2', '<i8')])
print(A.dtype)
# dtype([('col1', '<i4'), ('col2', '<i8')])
Najlepiej jest zawinąć tablicę (w rzeczywistości 2) i listę nazw do klasy kontenerów i użyć jej. – Keith
@Keith: masz na myśli jakąś konkretną klasę (jestem nowy w numpy)? –
Nie, mam na myśli to, co tworzysz. Następnie delegujesz operacje na tablice z metod zdefiniowanych w nowej klasie. Należy również zdefiniować metodę '__str__', aby ładnie drukować tablice z nagłówkami. – Keith