Python資料分析學習筆記二

2021-07-11 11:18:43 字數 3991 閱讀 3333

4、陣列的組合

numpy中的陣列組合有水平組合、垂直組合、深度組合和列組合等多種組合方式。
使用hstack()函式可以完成陣列的水平拼接,例:

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.hstack((a1,a2))

print b

輸出結果:

[[0 1 2]

[3 4 5]

[6 7 8]]

[[ 0 2 4]

[ 6 8 10]

[12 14 16]]

[[ 0 1 2 0 2 4]

[ 3 4 5 6 8 10]

[ 6 7 8 12 14 16]]

由上面的**可以得到,所謂水平組合,就是將陣列a1,a2的每一行進行拼接得到一行,陣列的行數不變,列數增加

上面的效果也可以使用concatenate函式實現

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.concatenate((a1,a2),axis=1)

print b

輸出效果與上乙個程式一樣,需要注意的是,在這兩個函式內需要傳入的都是python的元組,所以應該在a1,a2外加上括號();

由上面的程式效果可以推導出,所謂的垂直組合就是將兩個陣列的每一列進行拼接,陣列的列數不變,行數增加,例如:

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.vstack((a1,a2))

print b

輸出結果:

[[0 1 2]

[3 4 5]

[6 7 8]]

[[ 0 2 4]

[ 6 8 10]

[12 14 16]]

[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 0 2 4]

[ 6 8 10]

[12 14 16]]

同樣,在這裡我們也可以使用concatenate函式進行實現,只需要將axis的引數設定為0就可以了,例:

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.concatenate((a1,a2),axis=0)

print b

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.dstack((a1,a2))

print b.shape

print b

輸出結果:

[[0 1 2]

[3 4 5]

[6 7 8]]

[[ 0 2 4]

[ 6 8 10]

[12 14 16]]

(3, 3, 2)

[ [

[ 00] [ 1

2] [ 2

4] ]

[[ 3

6] [ 4

8] [ 5

10] ]

[[ 6

12] [ 7

14] [ 8

16] ]

]

可以看出,深度組合不僅進行了陣列的組合,還改變了陣列的維度,也就是將一系列陣列沿著縱軸(深度)方向進行層疊組合。也就是組合成為乙個z軸為2,x軸3,y軸為3的三維陣列。

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.column_stack((a1,a2))

print b.shape

print b

輸出結果:

[[0 1 2]

[3 4 5]

[6 7 8]]

[[ 0 2 4]

[ 6 8 10]

[12 14 16]]

(3, 6)

[[ 0 1 2 0 2 4]

[ 3 4 5 6 8 10]

[ 6 7 8 12 14 16]]

顯示結果可以看到,實際上對於二維陣列而言,hstack 和column_stack的效果是一樣的。

但是對於一位陣列來說,則會將兩個陣列覆蓋成為乙個二維陣列,將每乙個陣列的每一列一一對應組成二維陣列的一列,例:

import numpy as np

a1 = np.arange(10)

a2 = np.arange(1,11)

b = np.column_stack((a1,a2))

print b.shape

print b

輸出結果:

(10, 2)

[[ 0 1]

[ 1 2]

[ 2 3]

[ 3 4]

[ 4 5]

[ 5 6]

[ 6 7]

[ 7 8]

[ 8 9]

[ 9 10]]

行組合:

行組合的特性與列組合是一致的,可以通過下面的例子比較一下:

一維陣列:

import numpy as np

a1 = np.arange(10)

a2 = np.arange(1,11)

b = np.row_stack((a1,a2))

print b.shape

print b

輸出結果:

(2, 10)

[[ 0 1 2 3 4 5 6 7 8 9]

[ 1 2 3 4 5 6 7 8 9 10]]

二維陣列:

import numpy as np

a1 = np.arange(9).reshape(3,3)

print a1

a2 = a1 * 2

print a2

b = np.row_stack((a1,a2))

print b.shape

print b

輸出結果:

[[0 1 2]

[3 4 5]

[6 7 8]]

[[ 0 2 4]

[ 6 8 10]

[12 14 16]]

(6, 3)

[[ 0 1 2]

[ 3 4 5]

[ 6 7 8]

[ 0 2 4]

[ 6 8 10]

[12 14 16]]

Python資料分析筆記(二)

接上文python資料分析筆記 一 關注一些每行資料的 a 字段 發現這行含有url短操作的瀏覽器,裝置,應用程式的相關資訊 我們現在想要按微軟使用者和非微軟使用者對時區資訊進行分解,即想知道不同時區微軟使用者和非微軟使用者的比例 假定 a 欄位中含有 windows 的就認為是微軟使用者 首先,去...

04 資料分析 學習筆記(二)

四 r的資料視覺化基礎繪圖包 lattice包 ggplot2包 其他圖形 1 具體目標 探索型 接受型 2 資料和受眾的特點 哪些變數最重要 受眾的角色 合適的對映方式 對映的圖形元素 1 座標位置 2 線條 3 尺寸 4 色彩 5 形狀 6 文字 資料視覺化元素 graphics 自帶繪圖包 p...

Python資料分析學習筆記四

之前已經接觸過的陣列屬性有 shape 維度 dtype 資料型別 除此之外,還有很多其他屬性 1 ndim屬性 輸出陣列的維度,或者說陣列軸的個數 2 size屬性 給出陣列下標的總個數 3 itemsize屬性 給出陣列中單個元素在記憶體中佔據的位元組數 4 nbytes屬性 給出陣列中所有元素...