numpy 張量拉平與恢復

2021-10-23 02:55:35 字數 1340 閱讀 5886

numpy 中的高維陣列可以使用其自帶的flatten函式轉化成 1 維陣列。

在優化問題的梯度下降求解過程中,把高維的梯度變成 1 維陣列是很重要的,方便求自適應步長。

把張量拉平容易,怎麼把它復原到原來的維度呢?

這自然想到把原本的張量維度儲存下來,下面介紹這個小技巧:

from functools import partial

defflatten

(x):

original_shape = x.shape

return x.flatten(

), partial(np.reshape, newshape=original_shape)

上面這個flatten函式有兩個返回值,乙個是拉平後的 1 維陣列,第二個是恢復原來形狀的函式,舉個例子:

>>

> a = np.random.random((2

,3))

>>

> a

array([[

0.1911062

,0.17940551

,0.93155731],

[0.06759109

,0.12956553

,0.86589604]]

)>>

> a_, unflatten = flatten(a)

>>

> a_

array(

[0.1911062

,0.17940551

,0.93155731

,0.06759109

,0.12956553

,0.86589604])

>>

> unflatten

functools.partial(

>

, newshape=(2

,3))

>>

> unflatten(a_)

array([[

0.1911062

,0.17940551

,0.93155731],

[0.06759109

,0.12956553

,0.86589604]]

)

這個例子應該非常直觀吧!!

這裡用到了 python 函式庫中的partial

partial的第乙個引數為函式名,其它引數為預設填補的引數。

這裡把陣列原來的形狀告訴np.reshape,就可以實現形狀還原啦。

機器學習筆記之Numpy與張量

np.squeeze 張量是矩陣向任意維度的推廣 張量的維度通常叫軸 僅含乙個數字的張量叫標量 0d張量 0d x np.array 12 print x print x.ndim 1d x np.array 12,3,6,14,7 print x print x.ndim 2d x np.arra...

numpy中張量維度的簡單理解

接觸numpy不久,一直不太理解裡面的張量還有axis軸究竟是個什麼東西。貌似隨便給我乙個高維的張量都不能描述它的shape是什麼樣的。後來自己仔細研究了一下,有所收穫。首先,張量不同於向量或者矩陣。一維的張量是沒有行與列之分的。import numpy as np a 1,2 b 1 2 a np...

單位張量叉乘 附錄向量與張量運算

附錄 向量與張量運算 標量 向量與張量 1.1基本概念 在本書中所涉及的物理量可分為標量 向量和張量。我們非常熟悉標量,它是在空間沒有取向的物理量,只有乙個數就可以表示其狀態。例如質量 壓強 密度 溫度等都是 標量。向量則是在空間有一定取向的物理量,它既有大小 又有方向。在三維空間中,需要三個數來表...