一、concat函數介紹
在numpy中,concat函數可以用于沿特定軸連接兩個或多個數組。
np.concatenate((a1, a2, ...), axis=0, out=None)
參數axis指示了沿哪個軸連接數組。如果沒有指定,np.concatenate默認將沿著第一個維度(即axis=0)進行連接。
二、在第一個軸上連接數組
當輸入參數里所有數組的shape在第一個軸上的大小相同時,我們可以通過np.concatenate將它們在第一個軸上連接起來。
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr3 = np.array([[9, 10], [11, 12]])
result = np.concatenate((arr1, arr2, arr3))
print(result)
輸出結果為:
[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
三、在其他軸上連接數組
當我們需要連接的數組shape不同的軸時,可以通過np.concatenate指定軸號,來沿其他軸對數組進行連接。
arr1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
arr2 = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
# 沿第一個軸連接
result1 = np.concatenate((arr1, arr2), axis=0)
# 沿第三個軸連接
result2 = np.concatenate((arr1, arr2), axis=2)
print("沿第一個軸連接結果:\n", result1)
print("沿第三個軸連接結果:\n", result2)
輸出結果為:
沿第一個軸連接結果:
[[[ 1 2]
[ 3 4]]
[[ 5 6]
[ 7 8]]
[[ 9 10]
[11 12]]
[[13 14]
[15 16]]]
沿第三個軸連接結果:
[[[ 1 2 9 10]
[ 3 4 11 12]]
[[ 5 6 13 14]
[ 7 8 15 16]]]
四、使用out參數避免數組復制
在進行大量數組連接操作時,numpy會創建一個新的數組來存儲最終結果,這將導致不必要的內存復制。可以通過指定參數out來避免這種情況。
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.array([7, 8, 9])
# 指定輸出數組
out = np.zeros(9)
np.concatenate([x, y, z], out=out)
print(out)
輸出結果為:
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
五、使用stack函數進行堆疊操作
除了concatenate函數,numpy還提供了stack函數,不同之處在于,stack函數會將輸入的數組沿新的軸方向堆疊起來。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
# 沿新軸(第一軸)方向堆疊數組
result = np.stack((arr1, arr2, arr3))
print(result)
輸出結果為:
[[1 2 3]
[4 5 6]
[7 8 9]]
六、總結
Numpy的concatenate函數提供了沿特定軸連接兩個或多個數組的功能。通過指定參數axis可以選擇不同軸向進行連接。如果需要避免不必要的內存復制,可以使用參數out來指定輸出數組。stack函數則提供了將輸入的數組沿新的軸方向堆疊起來的功能。