NumPy /ndarray屬性( 初步學習 tcy)
阿新 • • 發佈:2019-02-04
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
====================================================================