2 回答

TA貢獻1818條經驗 獲得超3個贊
簡而言之,numpy ndarrays 有這個屬性叫做 stride,也就是
要在內存中跳過以繼續到下一個元素的字節數。例如,對于 (10, 10) 字節數組,步長可能是 (10, 1),換句話說:前進一個字節以到達下一列,前進 10 個字節以定位下一行。
對于您的 ndarray a
,a.stride
= (8,)
,這表明它只是一維的,并且要到達該一維上的下一個元素,您需要在內存中提前 8 個字節(每個 int 是 64 位)。
步幅對于表示轉置很有用:
例如,通過修改步幅,可以零成本轉置或重塑數組(無需復制內存)。
因此,如果有一個二維 ndarray,b = np.ones((3,5))
例如,然后b.strides
= (40, 8)
,而b.transpose().strides
= (8, 40)
。因此,如您所見,轉置的 2D-ndarray 只是完全相同的數組,其步幅已重新排序。而且由于您的一維 ndarray 只有一維,因此交換其步幅的值(即取其轉置)不會做任何事情。

TA貢獻1850條經驗 獲得超11個贊
正如您已經提到的,numpy 數組不是矩陣。轉置函數的定義如下
置換數組的維度。
這意味著 numpy 的轉置方法會將數據從一個維度移動到另一個維度。由于一維數組只有一個維度,因此沒有其他維度可以移動數據 t0。所以你需要在轉置有任何效果之前添加一個維度。這種行為對于與更高維數組(3D、4D ...)數組保持一致也是有意義的。
有一種干凈的方法可以實現您想要的
N = 10
a = np.arange(N)
a[ :, np.newaxis]
添加回答
舉報