先說結論
np.r_是按行方向擴展連接兩個矩陣(row的縮寫r),就是把兩矩陣上下相加,要求列數相等。作用等同於 vstack 函數
np.c_是按列方向擴展連接兩個矩陣(column的縮寫c),就是把兩矩陣左右相加,要求行數相等。作用等同於 hstack 函數
測試代碼
import numpy as np
z = np.random.randint(10, 20, (3, 3))
k = np.random.randint(1, 10, (3, 3))
print(z)
print(k)
print("列方向擴展連接(hstack函數)", '\n', np.hstack([z, k]))
print("行方向擴展連接(vstack函數)", '\n', np.vstack([z, k]))
print("列方向擴展連接(c_)", '\n', np.c_[z, k])
print("行方向擴展連接(r_)", '\n', np.r_[z, k])
結果示意
[[13 18 19]
[13 12 19]
[10 11 17]]
[[9 6 4]
[1 5 7]
[1 4 8]]
列方向擴展連接(hstack函數)
[[13 18 19 9 6 4]
[13 12 19 1 5 7]
[10 11 17 1 4 8]]
行方向擴展連接(vstack函數)
[[13 18 19]
[13 12 19]
[10 11 17]
[ 9 6 4]
[ 1 5 7]
[ 1 4 8]]
列方向擴展連接(c_)
[[13 18 19 9 6 4]
[13 12 19 1 5 7]
[10 11 17 1 4 8]]
行方向擴展連接(r_)
[[13 18 19]
[13 12 19]
[10 11 17]
[ 9 6 4]
[ 1 5 7]
[ 1 4 8]]
功能上 np.r_ 等同於 hstack 函數,np.c_ 等同於 vstack 函數
注意一點是
調用時 hstack 函數 vstack 函數是np.hstack([a,b])
和 np.vstack([a,b])
它倆是函數,有小括號。
而 r_ 、 c_ 在調用時是np.r_[a, b]
和np.c_[a, b]
沒用小括號,說明它倆不是函數
使用時注意兩者區別
官方文檔也說了,它倆不是函數