Python中numpy.ndarray.flatten( ),matrix.A用法

維度

一個(gè)不是很簡(jiǎn)單,但是很好理解的方法是:你的輸入矩陣的shape是(2,2,4),那么當(dāng)axis=0時(shí),就是在第一個(gè)dimension上進(jìn)行求和,最后得到的結(jié)果的shape就是去掉第一個(gè)dimension后的shape,也就是(2,4)。具體的計(jì)算方法則是,對(duì)于c[i,j,k],假設(shè)輸出矩陣為s[j,k],第一個(gè)dimension求和那么就是
s[j,k]=∑i(c[i,j,k])

如果axis=1,那么輸出shape就是去掉第二個(gè)dim,也就是(2,4),計(jì)算是 s[i,k]=sumj(c[i,j,k])

如果axis=2,那么輸出shape就是去掉第三個(gè)dim,也就是(2,2),計(jì)算是 s[i,j]=sumk(c[i,j,k])

在數(shù)據(jù)處理里面經(jīng)常會(huì)碰到高維數(shù)據(jù),通過(guò)二維矩陣去想它的計(jì)算方法就很難了,這個(gè)時(shí)候只要按axis對(duì)應(yīng)的維度求和,其他維度的位置和形狀不變,最后把shape去掉對(duì)應(yīng)維度就能理解了

import numpy as np
c = np.array([[[0, 1, 2, 3],
[4, 5, 6, 7]],
[[1, 2, 3, 4],
[5, 6, 7, 8]]])

print (c.sum(axis=0))
print (c.sum(axis=1))
print (c.sum(axis=2))

[[ 1 3 5 7]
[ 9 11 13 15]]
[[ 4 6 8 10]
[ 6 8 10 12]]
[[ 6 22]
[10 26]]

flatten()函數(shù)用法

flatten是numpy.ndarray.flatten的一個(gè)函數(shù),即返回一個(gè)折疊成一維的數(shù)組。但是該函數(shù)只能適用于numpy對(duì)象,即array或者mat,普通的list列表是不行的。
其官方文檔是這樣描述的

Parameters:

ndarray.flatten(order='C')
Return a copy of the array collapsed into one dimension.
order : {‘C’, ‘F’, ‘A’, ‘K’}, optional

‘C’ means to flatten in row-major (C-style) order. ‘F’ means to flatten in column-major (Fortran- style) order. ‘A’ means to flatten in column-major order if a is Fortran contiguous in memory, row-major order otherwise. ‘K’ means to flatten a in the order the elements occur in memory. The default is ‘C’.

a是個(gè)矩陣或者數(shù)組,a.flatten()就是把a(bǔ)降到一維,默認(rèn)是按橫的方向降
那么a.flatten().A又是什么呢? 其實(shí)這是因?yàn)榇藭r(shí)的a是個(gè)矩陣,降維后還是個(gè)矩陣,矩陣.A(等效于矩陣.getA())變成了數(shù)組。具體看下面的例子:

1、用于array對(duì)象

>>> from numpy import *
>>> a=array([[1,2],[3,4],[5,6]])
>>> a
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a.flatten()
array([1, 2, 3, 4, 5, 6])
>>> a.flatten('F')
array([1, 3, 5, 2, 4, 6])  # 按列排序
>>> a.flatten('A')
array([1, 2, 3, 4, 5, 6])
>>> 

2、用于mat對(duì)象

>>> a=mat([[1,2,3],[4,5,6]])
>>> a
matrix([[1, 2, 3],
        [4, 5, 6]])
>>> a.flatten()
matrix([[1, 2, 3, 4, 5, 6]])
>>> a=mat([[1,2,3],[4,5,6]])
>>> a
matrix([[1, 2, 3],
        [4, 5, 6]])
>>> a.flatten()
matrix([[1, 2, 3, 4, 5, 6]])
>>> y=a.flatten().A 
>>> shape(y)
(1L, 6L)
>>> shape(y[0]) 
(6L,)
>>> a.flatten().A[0] 
array([1, 2, 3, 4, 5, 6])
>>>  

從中可以看出matrix.A的用法和矩陣發(fā)生的變化。

3、但是該方法不能用于list對(duì)象,想要list達(dá)到同樣的效果可以使用列表表達(dá)式:

>>> a=array([[1,2],[3,4],[5,6]])
>>> [y for x in a for y in x]
[1, 2, 3, 4, 5, 6]
>>> 

完美實(shí)現(xiàn)?。?/p>

參考:http://www.cnblogs.com/harvey888/p/5590357.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容