1.ndarray對象的內部機理

NumPy的ndarray提供了一種將同質化數據塊解釋為多維數組對象的方式,ndarray如此強大的部分原因是所有數組對象都是數據塊的一個跨度視圖。

ndarray內部由以下內容組成:

a.一個指向數組(一個系統內存塊)的指針

b.數據類型或dtype

c.一個表示數組形狀的元組;例如,一個10*5的數組,其形狀為(10,5)

d.一個跨度元組,其中的整數指的是為了前進到當前維度下一個元素需要“跨度”的字節數;如,一個3*4*5的float(8個字節)數組,其跨度為(160,40,8)

2.NumPy數據類型體系

NumPy數據類型體系

3.gao級重塑

假設有一個一維數組,我們希望將其重新排列為一個矩陣

*重塑

多維數組同樣也能被重塑。

4.C和Fortran順序

默認情況下,NumPy數組是按行優先順序創建的。在空間方面,意味著,對于一個二維數組,每行中的數據項是被存放在相鄰內存位置上的。另一種順序是列優先順序,意味著每列中的數據項是被存放在相鄰內存位置上的。

由于一些歷史原因,行和列優先順序又分別稱為C和Fortran順序。

C和Fortran順序

二維或更高數組的重溯過程比較令人費解。C和Fortran順序的關鍵區別就是維度的行進順序:

a.C/行優先順序:先經過更高的維度(如,軸1會優先于軸0被處理)

b.Fortran/列優先順序:后經過更高的維度(如,軸0會優先于軸1被處理)

5.數組的合并和拆分

numpy.concatenate可以按指定軸將一個由數組組成的列連接到一起;對于常見的連接操作,NumPy提供了一些比較方便的方法(如vstack和hstack)。因此,上面的運算還可以表達為:

print np.vstack((arr5,arr6))

print np.hstack((arr5,arr6))

結果為:

[[ 1 2 3]

[ 4 5 6]

[ 7 8 9]

[10 11 12]]

[[ 1 2 3 7 8 9]

[ 4 5 6 10 11 12]]

與此相反,split用于將一個數組沿指定軸拆分為多個數組。

5.堆疊輔助類:r_和c_

NumPy命名空間中有兩個特殊的對象:r_和c_,他們可以是數組的堆疊操作變的簡潔

.數組的合并和拆分

6.元素的重復操作:tile和repeat

repeat會將數組中的各個元素重復一定次數,從而產生一個更大的數組;默認情況下,如果傳入的是一個整數,則各元素就都會重復那么多次。如果傳入的是一組整數,則各元素就可以重復不同的次數;對于多維數組,還可以讓它們的元素沿指定軸重復;如果沒有設置軸向,則數組會被扁平化。同樣,在對多維進行重復時,也可以傳入一組整數,這樣就會使各切片重復不同的次數

print arr12.repeat([2,3],axis=0)

print arr12.repeat([2,3],axis=1)

結果為:

[[-0.77124211 0.05274718]

[-0.77124211 0.05274718]

[-0.77421856 0.66942701]

[-0.77421856 0.66942701]

[-0.77421856 0.66942701]]

[[-0.77124211 -0.77124211 0.05274718 0.05274718 0.05274718]

[-0.77421856 -0.77421856 0.66942701 0.66942701 0.66942701]]

tile的功能是沿指定軸向堆疊數組的副本。你可以形象地將其想象成“鋪瓷磚”;第二個參數是瓷磚的數量。對于標量,瓷磚是水平鋪設的,而不是垂直鋪設。它可以是一個表示“鋪設”布局的元組。