Lesson4——NumPy 陣列屬性

cute_Learner發表於2022-02-07

NumPy 教程目錄

  NumPy 陣列的維數稱為秩(rank),秩就是軸的數量,即陣列的維度,一維陣列的秩為 1,二維陣列的秩為 2,以此類推。

  在 NumPy中,每一個線性的陣列稱為是一個軸(axis),也就是維度(dimensions)。比如說,二維陣列相當於是兩個一維陣列,其中第一個一維陣列中每個元素又是一個一維陣列。所以一維陣列就是 NumPy 中的軸(axis),第一個軸相當於是底層陣列,第二個軸是底層陣列裡的陣列。而軸的數量——秩,就是陣列的維數。

  很多時候可以宣告 axis。

    • axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;
    • axis=1,表示沿著第1軸進行操作,即對每一行進行操作。

  NumPy 的陣列中比較重要 ndarray 物件屬性有:

屬性說明
ndarray.ndim 秩,即軸的數量或維度的數量
ndarray.shape 陣列的維度,對於矩陣,n 行 m 列
ndarray.size 陣列元素的總個數,相當於 .shape 中 n*m 的值
ndarray.dtype ndarray 物件的元素型別
ndarray.itemsize ndarray 物件中每個元素的大小,以位元組為單位
ndarray.flags ndarray 物件的記憶體資訊
ndarray.real ndarray元素的實部
ndarray.imag ndarray 元素的虛部
ndarray.data 包含實際陣列元素的緩衝區,由於一般通過陣列的索引獲取元素,所以通常不需要使用這個屬性。
ndarray.flat 陣列上的一維迭代器。
ndarray.base Base object if memory is from some other object.

numpy.ndarray.ndim

  Examples:返回軸數。

>>> x = np.array([1, 2, 3])
>>> x.ndim
1
>>> y = np.zeros((2, 3, 4))
>>> y.ndim
3

ndarray.shape

  ndarray.shape 表示陣列的維度,返回一個元組,這個元組的長度就是維度的數目,即 ndim 屬性(秩)。比如,一個二維陣列,其維度表示"行數"和"列數"。

a = np.array([[1,2,3],[4,5,6]])  
print (a.shape)

(2, 3) #元組

  類似的  numpy.shape : Return the shape of an array.

np.shape(np.eye(3))
(3, 3)
np.shape([[1, 3]])
(1, 2)
np.shape([0])
(1,)
np.shape(0)
()

a = np.array([(1, 2), (3, 4), (5, 6)],
             dtype=[('x', 'i4'), ('y', 'i4')])
np.shape(a)
(3,)
a.shape
(3,)

  使用 ndarray.shape 調整資料大小:

a = np.array([[1,2,3],[4,5,6]]) 
a.shape =  (3,2)  
print (a)
#輸出結果為:
[[1 2]
 [3 4]
 [5 6]]

  類似的:NumPy 也提供了 reshape 函式來調整陣列大小。

a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2)  
print (b)
#輸出結果為:
[[1, 2] 
 [3, 4] 
 [5, 6]]

ndarray.itemsize

  ndarray.itemsize 以位元組的形式返回陣列中每一個元素的大小。

  例如,一個元素型別為 float64 的陣列 itemsize 屬性值為 8  (float64 佔用 64 個 bits,每個位元組長度為 8,所以 64/8,佔用 8 個位元組),又如,一個元素型別為 complex32 的陣列 item 屬性為 4(32/8)。

# 陣列的 dtype 為 int8(一個位元組)  
x = np.array([1,2,3,4,5], dtype = np.int8)  
print (x.itemsize)
 
# 陣列的 dtype 現在為 float64(八個位元組) 
y = np.array([1,2,3,4,5], dtype = np.float64)  
print (y.itemsize)
#輸出結果
1
8

ndarray.flags

  ndarray.flags 返回 ndarray 物件的記憶體資訊,包含以下屬性:

屬性描述
C_CONTIGUOUS (C) 資料是在一個單一的C風格的連續段中
F_CONTIGUOUS (F) 資料是在一個單一的Fortran風格的連續段中
OWNDATA (O) 陣列擁有它所使用的記憶體或從另一個物件中借用它
WRITEABLE (W) 資料區域可以被寫入,將該值設定為 False,則資料為只讀
ALIGNED (A) 資料和所有元素都適當地對齊到硬體上
UPDATEIFCOPY (U) 這個陣列是其它陣列的一個副本,當這個陣列被釋放時,原陣列的內容將被更新

numpy.ndarray.base

  返回 Base Object.

  Examples:

x = np.array([1,2])
print(x.base)
y=x[1:]
print(y.base) #返回的是 x 中的資料,有點像 copy
print(y.base is x) 
#輸出結果
None
[1 2]
True

numpy.ndarray.flat

  返回 ndarray 的一維迭代器。

  Examples:

x= np.arange(6).reshape((2,3))
print(x)
for i in x.flat:
    print(i,end=' ')
print()
print(type(x.flat))
#輸出結果
[[0 1 2]
 [3 4 5]]
0 1 2 3 4 5 
<class 'numpy.flatiter'>

numpy.ndarray.T

  返回轉置陣列。

  Examples:

x = np.array([[1.,2.],[3.,4.]])
print('原始陣列:\n',x)
print('轉置陣列:\n',x.T)
x = np.array([1.,2.,3.,4.])
print('原始陣列:\n',x)
print('轉置陣列:\n',x.T)
#輸出結果
原始陣列:
 [[1. 2.]
 [3. 4.]]
轉置陣列:
 [[1. 3.]
 [2. 4.]]
原始陣列:
 [1. 2. 3. 4.]
轉置陣列:
 [1. 2. 3. 4.]

numpy.ndarray.real & numpy.ndarray.imag

  • numpy.ndarray.real 返回 ndarray 的實部
  • numpy.ndarray.imag 返回 ndarray 的虛部

  Example1:

x = np.array([1.,2.,3.,4.])
print(x)
print(x.real)
print(x.imag)
#輸出結果
[1. 2. 3. 4.]
[1. 2. 3. 4.]
[0. 0. 0. 0.]

  Example2:

x = np.array([1+1j,2,3,4])
print(x)
print(x.real)
print(x.imag)
#輸出結果
[1.+1.j 2.+0.j 3.+0.j 4.+0.j]
[1. 2. 3. 4.]
[1. 0. 0. 0.]

  同樣可以通過 .real  和 .imag 修改元素的實部或者虛部。

  Examples3:

x = np.array([1+1j,2,3,4])
print(x)
print(x.real)
print(x.imag)
#通過x.real修改所有元素的實部
x.real = 9
print(x)
#通過x.imag修改所有元素的實部
x = np.array([1+1j,2,3,4])
x.imag = 7
print(x)
#輸出結果
[1.+1.j 2.+0.j 3.+0.j 4.+0.j]
[1. 2. 3. 4.]
[1. 0. 0. 0.]
[9.+1.j 9.+0.j 9.+0.j 9.+0.j]
[1.+7.j 2.+7.j 3.+7.j 4.+7.j]

  對於實部和虛部,存在:

  • np.real(x):返回實部
  • np.imag(x):返回虛部

  Examples:

print(np.real(x))
print(np.imag(x))
#輸出結果
[1. 2. 3. 4.]
[7. 7. 7. 7.]

 

相關文章