0
所以這裏的交易:我有變量x
這是一個numpy.ndarray
。這個結構的大小是1000.如果我做x[0]
,那麼我得到一個numpy.void
,4個數字。如果我做x[1]
,然後我得到另一個numpy.void
,也是4號等如何切片由numpy.void數字組成的numpy.ndarray?
我只是想做的事:我想切片這種數據結構,讓我提取numpy的矩陣,大小1000x3的。
我該怎麼做?由於
所以這裏的交易:我有變量x
這是一個numpy.ndarray
。這個結構的大小是1000.如果我做x[0]
,那麼我得到一個numpy.void
,4個數字。如果我做x[1]
,然後我得到另一個numpy.void
,也是4號等如何切片由numpy.void數字組成的numpy.ndarray?
我只是想做的事:我想切片這種數據結構,讓我提取numpy的矩陣,大小1000x3的。
我該怎麼做?由於
聽起來像是你有一個結構化的陣列,像這樣簡單的例子:
In [158]: x = np.ones((5,), dtype='i,i,f,f')
In [159]: x
Out[159]:
array([(1, 1, 1., 1.), (1, 1, 1., 1.), (1, 1, 1., 1.),
(1, 1, 1., 1.), (1, 1, 1., 1.)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<f4')])
In [160]: x[0]
Out[160]: (1, 1, 1., 1.)
In [161]: type(x[0])
Out[161]: numpy.void
x[0]
是一個記錄,顯示爲一個元組。您可以通過名稱訪問字段(不是「列」指數):
In [162]: x['f0']
Out[162]: array([1, 1, 1, 1, 1], dtype=int32)
In [163]: x['f2'] = np.arange(5)
In [165]: x['f1'] = [10,12,8,0,3]
In [166]: x
Out[166]:
array([(1, 10, 0., 1.), (1, 12, 1., 1.), (1, 8, 2., 1.),
(1, 0, 3., 1.), (1, 3, 4., 1.)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<f4')])
In [168]: x[['f2','f3']] # 2 fields at once
Out[168]:
array([(0., 1.), (1., 1.), (2., 1.), (3., 1.), (4., 1.)],
dtype=[('f2', '<f4'), ('f3', '<f4')])
這是非常方便的時候「列」應包含不同的東西,比如字符串之一,另一個整數。但將這樣的數組轉換爲相同數值類型的二維數組可能會很尷尬。
view
和astype
在有限的情況下工作,但tolist
是我知道的最強大的轉換媒介。
In [179]: x.tolist()
Out[179]:
[(1, 10, 0.0, 1.0),
(1, 12, 1.0, 1.0),
(1, 8, 2.0, 1.0),
(1, 0, 3.0, 1.0),
(1, 3, 4.0, 1.0)]
In [180]: np.array(x.tolist())
Out[180]:
array([[ 1., 10., 0., 1.],
[ 1., 12., 1., 1.],
[ 1., 8., 2., 1.],
[ 1., 0., 3., 1.],
[ 1., 3., 4., 1.]])
注意,tolist
用於結構化陣列是元組的列表,而對tolist
2D陣列是一個列表的列表。朝着這個方向發展,差異並不重要。換個角度看,差異很重要。
你是如何生成這個數組的?從csv
與genfromtxt
?作爲一些其他數字包的輸出?
耶穌基督。這正是我需要的。非常感謝!!我沒有生成它,我遞給它。 :)如果我有能力生成它,我認爲我不會以這種方式纏繞它。 – Spacey