numpy.ndarray.reshape()函數的引數問題

2020-10-12 15:00:24

我們知道numpy.ndarray.reshape()是用來改變numpy陣列的形狀的,但是它的引數會有一些特殊的用法,這裡我們進一步說明一下。程式碼如下:

import numpy as np


class Debug:
    def __init__(self):
        self.array1 = np.ones(6)

    def mainProgram(self):
        print("The value of array1 is: ")
        print(self.array1)
        print("The array2 is: ")
        array2 = self.array1.reshape(2, 3)
        print(array2)


if __name__ == '__main__':
    main = Debug()
    main.mainProgram()
"""
The value of array1 is: 
[1. 1. 1. 1. 1. 1.]
The array2 is: 
[[1. 1. 1.]
 [1. 1. 1.]]
"""

這裡我們看到我們將一個長度為6的一維陣列變成了一個尺寸為(2, 3)的二維陣列,這裡的2代表2行,對應y軸,3代表3列,對應x軸。

然而有時候我們會在reshape中使用到-1這個引數,當使用這個引數時,會將陣列重新塑形變得十分簡單。程式碼如下:

class Debug:
    def __init__(self):
        self.array1 = np.ones(6)

    def mainProgram(self):
        print("The value of array1 is: ")
        print(self.array1)
        print("The array2 is: ")
        array2 = self.array1.reshape(-1, 3)
        print(array2)


if __name__ == '__main__':
    main = Debug()
    main.mainProgram()
"""
The value of array1 is: 
[1. 1. 1. 1. 1. 1.]
The array2 is: 
[[1. 1. 1.]
 [1. 1. 1.]]
"""

我們可以看到當我們將reshape的第一個引數變為-1時,我們仍舊獲得了一個尺寸為(2, 3)的陣列,其實在這裡,-1代表的意思為6 / 3 =2,其中6是被塑形一維陣列的長度,3是我們指定的二維陣列一個方向的維度。這樣的好處就是當資料量比較大時,我們在二維陣列重新塑形時只需要指定一個維度上的尺寸,另一個維度上的尺寸python會自動為我們計算。

如果大家覺得有用,請高擡貴手給一個贊讓我上推薦讓更多的人看到吧~