1. 程式人生 > >陣列形狀操作-扁平化( 初步學習 tcy)

陣列形狀操作-扁平化( 初步學習 tcy)

陣列形狀操作-扁平化 2018/11/26
    
========================================================================
1.函式:                          # 與reshape 將1D轉xD陣列的運算過程相反的運算通常稱為扁平化
    
np.ravel(a, order='C')   # 返回新1D陣列(不更改原陣列)
a.ravel([order])             # 如沒必要ravel不產生源資料副本
    
a.flatten(order='C')       # 類似於ravel 總是返回1D資料的副本
a.flat                             # 陣列一維迭代器
    
========================================================================
2.例項
a = np.array([[1, 2, 3], [4, 5, 6]])
    
a.ravel()                # array([1, 2, 3, 4, 5, 6])
a.ravel('F')            # array([1, 4, 2, 5, 3, 6])
a.flatten()              # array([1, 2, 3, 4, 5, 6])
    
it=a.flat                 #陣列一維迭代器
[i for i in a.flat]     #[1, 2, 3, 4, 5, 6]
========================================================================
    
# 3說明:
# C和Fortran順序{'C','F','A','K'}
#
# 1)控制資料在記憶體中的佈局。預設陣列按行優先順序建立
    
    # 'C'以行為主順序;每行資料存放在相鄰記憶體位置;
    # 'F'以列為主順序;每列資料存放在相鄰記憶體位置;矩陣全都是列優先
    # 如果a是記憶體中的Fortran 連續記憶體,則'A'表示按列主要順序變平,否則為行內主要順序。
    # 'K'表示按照元素在記憶體中出現的順序將a平坦化。
    
# 2)二維或高維陣列重塑過程
    # C和Fortran序的關鍵區別就是維度的行進順序:
    #     Cl行優先順序: 先經過更高的維度(例如,軸1 會先於軸0被處理)。
    #     Fortran/ylj優先順序:後經過更高的維度(例如,軸0會先於軸l被處理)。
========================================================================