NumPy - 陣列屬性



NumPy 陣列屬性

在 NumPy 中,屬性是陣列物件的特性,提供關於陣列及其資料的重要的資訊。這些屬性用於訪問關於陣列結構和配置的各種細節,而不會修改它們。

在本章中,我們將討論 NumPy 的各種陣列屬性。

NumPy 形狀屬性

NumPy 的shape屬性提供陣列的維度。它返回一個元組,表示陣列沿每個維度的尺寸。它也可以用於調整陣列大小。

示例 1

在下面的示例中,我們使用 shape 屬性檢索 NumPy 陣列的形狀:

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

獲得的輸出如下:

(2, 3)

示例 2

在這裡,我們使用 NumPy 中的 shape 屬性調整陣列大小:

import numpy as np 

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

這將產生以下結果:

[[1, 2] 
 [3, 4] 
 [5, 6]]

示例 3

NumPy 還提供了一個 reshape() 函式來調整陣列大小:

import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2) 
print (b)

以上程式碼的輸出如下:

[[1, 2] 
 [3, 4] 
 [5, 6]]

NumPy 維度屬性

ndim屬性返回陣列的維度(軸)數。

在 NumPy 中,陣列的維度稱為它的。NumPy 陣列中的每個軸對應一個維度。軸(維度)的數量稱為陣列的秩。

陣列可以是任何維度,從一維(1D)陣列(也稱為向量)到多維陣列,如二維(2D)陣列(矩陣)甚至更高維度的陣列。

示例 1

在這個例子中,我們使用 arange() 函式建立一個 NumPy 陣列 a,其中包含從“0”到“23”的“24”個均勻間隔的整數:

import numpy as np 
a = np.arange(24) 
print (a)

獲得的輸出如下所示:

[0 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 17 18 19 20 21 22 23] 

示例 2

這裡,我們使用 arange() 函式建立一個包含“24”個元素的一維 NumPy 陣列 a,然後將其重塑為形狀如提供的三維陣列“b”,從而得到一個 3D 陣列:

# This is one dimensional array 
import numpy as np 
a = np.arange(24) 
a.ndim  

# Now reshape it 
b = a.reshape(2,4,3) 
print (b) 
# b is having three dimensions

執行上述程式碼後,我們得到以下輸出:

[[[ 0,  1,  2] 
  [ 3,  4,  5] 
  [ 6,  7,  8] 
  [ 9, 10, 11]]  
  [[12, 13, 14] 
   [15, 16, 17]
   [18, 19, 20] 
   [21, 22, 23]]] 

NumPy 大小屬性

size屬性返回陣列中元素的總數。在 NumPy 中,陣列的大小是指陣列中包含的元素總數。

  • 對於一維陣列,大小隻是元素的數量。
  • 對於二維陣列,大小是行數和列數的乘積。
  • 對於三維陣列,大小是所有三個維度大小的乘積。

示例

在下面的示例中,我們使用 NumPy 中的“size”屬性來檢索 3D 陣列的大小:

import numpy as np
# Creating a 3D array
array_3d = np.array([[[1, 2, 3], [4, 5, 6]], 
                     [[7, 8, 9], [10, 11, 12]]])
print("3D Array:\n", array_3d)
print("Size of the array:", array_3d.size)

獲得的輸出如下:

3D Array:
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
Size of the array: 12

NumPy 資料型別屬性

dtype屬性描述陣列中元素的資料型別。在 NumPy 中,陣列的資料型別是指儲存在陣列中的元素的型別。

NumPy 支援各種資料型別,包括整數、浮點數、複數、布林值等等。每種資料型別都由一個dtype物件表示。“dtype”不僅指定資料的型別,還指定其大小和位元組序。

示例

在這個例子中,我們在建立 NumPy 陣列時使用“dtype”屬性指定其資料型別:

import numpy as np

# Creating an array of integers
int_array = np.array([1, 2, 3], dtype=np.int32)
print("Integer Array:", int_array)
print("Data type of int_array:", int_array.dtype)

# Creating an array of floats
float_array = np.array([1.1, 2.2, 3.3], dtype=np.float64)
print("Float Array:", float_array)
print("Data type of float_array:", float_array.dtype)

# Creating an array of complex numbers
complex_array = np.array([1 + 2j, 3 + 4j], dtype=np.complex128)
print("Complex Array:", complex_array)
print("Data type of complex_array:", complex_array.dtype)

這將產生以下結果:

Integer Array: [1 2 3]
Data type of int_array: int32
Float Array: [1.1 2.2 3.3]
Data type of float_array: float64
Complex Array: [1.+2.j 3.+4.j]
Data type of complex_array: complex128

NumPy 元素大小屬性

itemsize屬性返回陣列中每個元素的長度(以位元組為單位)。

元素大小由陣列的資料型別 (dtype) 決定。不同的資料型別需要不同的記憶體量。例如,int32型別每個元素需要“4”個位元組,而float64型別每個元素需要“8”個位元組。

示例 1

在下面的示例中,我們檢查整數資料型別“int8”陣列的元素大小:

# dtype of array is int8 (1 byte) 
import numpy as np 
x = np.array([1,2,3,4,5], dtype = np.int8) 
print (x.itemsize)

我們得到如下所示的輸出:

1

示例 2

現在,我們檢查浮點資料型別“float32”陣列的元素大小:

# dtype of array is now float32 (4 bytes) 
import numpy as np 
x = np.array([1,2,3,4,5], dtype = np.float32) 
print (x.itemsize)

產生的結果如下:

4

NumPy 緩衝區資訊屬性

nbytes屬性返回陣列元素總共佔用的位元組數。

在 NumPy 中,陣列的緩衝區資訊提供了關於儲存陣列資料的底層記憶體結構的詳細資訊。這包括關於記憶體佈局、資料型別和緩衝區內位元組偏移量的資訊。

示例

在這個例子中,我們使用“nbytes”屬性來檢索陣列資料緩衝區使用的總記憶體:

import numpy as np
# Creating an array
array = np.array([1, 2, 3, 4, 5], dtype=np.int32)

# Checking total memory size of the array
print("Total memory size of the array:", array.nbytes, "bytes")

獲得的輸出如下所示:

Total memory size of the array: 20 bytes

NumPy 步長屬性

strides屬性提供遍歷陣列時每個維度需要步進的位元組數。

步長指定在記憶體中必須跳過的位元組數,以便沿每個軸從一個元素移動到下一個元素。它們有助於確定陣列如何在記憶體中佈局以及如何訪問元素。

示例

在下面的示例中,我們使用“strides”屬性訪問二維陣列中的元素來計算記憶體地址:

import numpy as np

# Creating a 2D array
array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# Checking the strides
print("Array shape:", array.shape)
print("Array strides:", array.strides)

第一個軸(行)的步長為 16 個位元組,這意味著要從一行移動到下一行,NumPy 在記憶體中跳過 16 個位元組。第二個軸(列)的步長為 4 個位元組,表示要在同一行內從一列移動到下一列,NumPy 跳過 4 個位元組:

Array shape: (3, 4)
Array strides: (32, 8)

NumPy 標誌屬性

flags屬性返回有關陣列記憶體佈局的資訊,例如它是否在記憶體中連續。

NumPy 提供了幾個標誌來描述陣列記憶體佈局和屬性的不同方面:

序號 屬性和描述
1

C_CONTIGUOUS (C)

資料位於單個、C 風格的連續段中

2

F_CONTIGUOUS (F)

資料位於單個、Fortran 風格的連續段中

3

OWNDATA (O)

陣列擁有它使用的記憶體,或者從另一個物件借用記憶體

4

WRITEABLE (W)

資料區域可以寫入。將其設定為 False 會鎖定資料,使其成為只讀的

5

ALIGNED (A)

資料和所有元素都針對硬體進行了適當的對齊

6

UPDATEIFCOPY (U)

此陣列是其他一些陣列的副本。當此陣列被釋放時,基礎陣列將使用此陣列的內容進行更新

示例

以下示例顯示陣列標誌的當前值:

import numpy as np 
x = np.array([1,2,3,4,5]) 
print (x.flags)

獲得的輸出如下:

C_CONTIGUOUS : True 
F_CONTIGUOUS : True 
OWNDATA : True 
WRITEABLE : True 
ALIGNED : True 
UPDATEIFCOPY : False

NumPy 基礎屬性

如果陣列是另一個數組的檢視,則base屬性返回基礎物件。如果陣列擁有其資料,則 base 為“None”。在 NumPy 中,“陣列基礎”的概念是指從中派生新陣列的原始陣列。

示例

在這個例子中,“view_array”是“original_array”的檢視,而“view_array”的 base 屬性指向“original_array”:

import numpy as np

# Creating an array
original_array = np.array([[1, 2, 3], [4, 5, 6]])

# Creating a view (a slice) of the original array
view_array = original_array[0:1, :]

# Checking the base of the view
print("Base array of view_array:", view_array.base)

產生的結果如下:

Base array of view_array: [[1 2 3]
 [4 5 6]]

NumPy 實部和虛部屬性

對於包含複數的陣列,realimag屬性分別返回實部和虛部。

示例

在這個例子中,我們使用“real”屬性返回一個包含實部的陣列,並使用“imag”屬性返回一個包含虛部的陣列:

import numpy as np

# Creating an array of complex numbers
complex_array = np.array([1+2j, 3+4j, 5+6j])

# Accessing the real part
real_part = complex_array.real
print("Real part:", real_part)

# Accessing the imaginary part
imaginary_part = complex_array.imag
print("Imaginary part:", imaginary_part)

我們得到如下所示的輸出:

Real part: [1. 3. 5.]
Imaginary part: [2. 4. 6.]
廣告