1. 程式人生 > >NumPy /ndarray屬性( 初步學習 tcy)

NumPy /ndarray屬性( 初步學習 tcy)

NumPy /ndarray屬性                                     2018/6/17  2018/11/25
    
===================================================================
# NumPy物件是同種元素多維陣列。維度(dimensions)叫做軸(axes),軸的個數叫做rank
No 常量
1 np.nan  不能使用相等性來測試NaN
2 np.info
屬性
1 a.base 基類
2 a.ctypes
3 a.data 指向陣列資料開始的Python緩衝區物件。
4 a.dtype              陣列元素型別
5 a.dtype.name    資料型別名;如'int32'
6 a.flags 標識
C_CONTIGUOUS   True  資料位於單個C風格的連續段中
F_CONTIGUOUS   True  資料位於單個F風格的連續段中
OWNDATA   True  該陣列擁自己的記憶體或從另一個物件借用它
WRITEABLE   True  可寫入資料區域。為False鎖定資料;只讀
ALIGNED   True  資料和所有元素都適合硬體對齊
WRITEBACKIFCOPY   False 此陣列是其他一些陣列副本
UPDATEIFCOPY   False 此陣列是其他陣列副本(不推薦用)。
          取消分配此陣列,將用此陣列內容更新基本陣列
7 a.flat 陣列上的一維迭代器
8 a.imag     array中所有元素的虛數部分
9 a.itemsize          元素位元組大小
10 a.nbytes  array總位元組數(=itemsize*size)
11 a.ndim                array的維度;陣列軸的個數稱作秩
12 a.real     代表一個array中所有元素的實數部分
13 a.shape             陣列形狀如(2,3)
14 a.size                 陣列元素總數(=2*3)
15 a.strides 步幅:遍歷陣列時遍歷每個維度的位元組元組。
16 a.T     矩陣轉置,同transpose()方法
17 type(a)             <class 'numpy.ndarray'>
2.屬性
    
2.1.numpy.ndarray.strides 步幅 #遍歷陣列時遍歷每個維度的位元組元組。
    
x = np.array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]], dtype=np.int32)
x.strides                                                #(20,4)
x.itemsize    # 4
x.size          #10
x.nbytes     #40  #array總位元組數(=itemsize*size)
offset=20   #20  行偏移量
offset =4    #4    列偏移量
    
# 說明:
    # 32位整數陣列x(每個4位元組), 40個位元組儲存在儲存器中,一個接一個地儲存(稱為連續的儲存器塊)。
    # 陣列的步幅告訴我們在記憶體中跳過多少位元組以沿著某個軸移動到下一個位置。
    # 如跳過4個位元組(1個值)移動到下一列,20個位元組(5個值)到達下一行相同位置。
    # 因此陣列x的步幅將是 (20, 4)
        
=================================================--==================
2.2.ndarray.flags
    
a.flags #有關陣列記憶體佈局的資訊
    
訪問:
    a.flags.writeable  #a.flags['WRITEABLE']
    
設定:
    y.setflags(write=0, align=0)
    
# 設定注意事項:
#     UPDATEIFCOPY只能設定False。
#     WRITEBACKIFCOPY只能設定False。
#     只有True在資料真正對齊的情況下才能設定ALIGNED 。
#     只有True當陣列擁有自己的記憶體或者記憶體的最終所有者公開可寫緩衝區介面或是字串時,才能設定WRITEABLE 。
#     陣列可以同時是C風格和Fortran風格的連續。這對於一維陣列來說是明確的,但對於更高維的陣列也是如此。
    
例項:
a = np.arange( 0, 2, 0.5)
a.flags
    
          # C_CONTIGUOUS : True
          # F_CONTIGUOUS : True
          # OWNDATA : True
          # WRITEABLE : True
          # ALIGNED : True
          # WRITEBACKIFCOPY : False
          # UPDATEIFCOPY : False
=======================================================-----===========
2.3.flat
    
a = np.arange( 0, 2, 0.5)
type(a)                                      #<class 'numpy.ndarray'>
np.array(a.flat).base==a.base  #True
np.array(a.flat)==a                   #array([ True,  True,  True,  True])
    

=====================================================================
3.nan,inf
    
a = np.array([1., 0., np.nan, 3.,np.inf,-np.inf])  #array([  1.,   0.,  nan,   3.,  inf, -inf])
    
# 型別判斷
np.isnan(np.nan)                      #True  nan判斷
np.isinf(np.inf)                           #True  inf判斷
    
np.isfinite(not np.nan)              #True  非nan,非inf判斷
np.isfinite(not np.inf)                #True
    
np.isnan(a)         #array([False, False,  True, False, False, False])
np.isinf(a)           #array([False, False, False, False,  True,  True])
np.isfinite(a)       #array([ True,  True, False,  True, False, False])
    
np.nan_to_num(a)   #Map nan to 0, inf to max float, -inf to min float
                                # array([ 1.00000000e+000,  0.00000000e+000,  0.00000000e+000,
                                #             3.00000000e+000,  1.79769313e+308, -1.79769313e+308])
    
a[np.isnan(a)] = 0.   #array([  1.,   0.,  0,   3.,  inf, -inf])
    
# 計算
np.nansum()         #忽略nan
np.nanmax()
np.nanmin()
np.nanargmax()
np.nanargmin()
    
x = np.arange(10.);
x[3] = np.nan
    
x.sum()                  #nan
np.nansum(x)        #42
    
====================================================================