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.]
广告
© . All rights reserved.