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屬性 給出陣列中所有元素...