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