numpy增加維度、刪除維度


楔子

在tensorflow中,可以給一個tensor增加一個維度、刪除一個維度,那么在numpy中該怎么呢?

刪除一個維度

import numpy as np
arr = np.array([[[1, 2, 3], [2, 3, 4]]])
print(arr)
"""
[[[1 2 3]
  [2 3 4]]]
"""
print(arr.shape)  # (1, 2, 3)
# 事實上第一個維度我們是不需要的,因為在該維度上數組的長度是1

# 刪除第1個維度,我們看到已經改變了
# 這個操作不會改變原來的數據
print(np.squeeze(arr, 0))
"""
[[1 2 3]
 [2 3 4]]
"""

但是注意:只有數組長度在該維度上為1,那么該維度才可以被刪除。

如果不是1,那么刪除的話會報錯

import numpy as np
arr = np.array([[[1, 2, 3], [2, 3, 4]]])

print(arr.shape)  # (1, 2, 3)

try:
    # 刪除第二個維度,顯然在第二個維度上數組的長度是2,不是1
    # 所以它不能被刪除
    print(np.squeeze(arr, 1))
except Exception as e:
    print(e)  # cannot select an axis to squeeze out which has size not equal to one

增加一個維度

刪除只能刪除數組長度為1所對應的維度,同理添加也是添加一個維度也只是讓數組在這個維度上的長度變成1,因為數組本來不存在這個維度的,但是我們強行加上了一個維度,那么數組在這個維度上的長度只能是1

import numpy as np
arr = np.array([[1, 2, 3], [2, 3, 4]])

print(arr.shape)  # (2, 3)

# 很好理解
print(np.expand_dims(arr, 0).shape)  # (1, 2, 3)
print(np.expand_dims(arr, 1).shape)  # (2, 1, 3)
print(np.expand_dims(arr, 2).shape)  # (2, 3, 1)

arr = np.array([1, 2, 3])
print(np.expand_dims(arr, 0))
"""
[[1 2 3]]
"""
print(np.expand_dims(arr, 1))
"""
[[1]
 [2]
 [3]]
"""


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM