2、NumPy ndarray:多维数组对象基础

发布时间:2024年01月16日

目录

1. ndarray 对象简介

2. 创建 ndarray

从现有数据创建

使用内置函数创建

使用范围和间隔创建数组

使用随机函数创建数组

3. 数组属性和数据类型

常用属性

数据类型转换


1. ndarray 对象简介

NumPy 的 ndarray 是一个多维数组对象,它支持快速的、向量化的数组操作。与 Python 原生的列表相比,ndarray 提供了更加丰富的操作和更高效的存储。

核心特性

  • 同质性ndarray?中的所有元素必须是相同数据类型。
  • 多维性:可以是任意维度的数据结构,如向量(1维)、矩阵(2维)或更高维数据。
  • 高效性:NumPy 在内存中使用连续块存储数据,优化了缓存的使用,提高了计算性能。

2. 创建 ndarray

NumPy 提供了多种方式来创建 ndarray 对象。

从现有数据创建

直接将 Python 列表或元组转换为 ndarray

import numpy as np

# 从列表创建
list_array = np.array([1, 2, 3, 4, 5])

# 从多维列表创建
multi_list_array = np.array([[1, 2], [3, 4]])

# 从元组创建
tuple_array = np.array((1, 2, 3, 4, 5))

# 从多维元组创建
multi_tuple_array = np.array(((1, 2), (3, 4)))

使用内置函数创建

NumPy 有许多内置函数来创建具有特定形状和数据的数组。

# 创建全为 0 的数组
zeros_array = np.zeros((3, 4))

# 创建全为 1 的数组
ones_array = np.ones((2, 3))

# 创建一个给定形状的没有初始化的数组(其内容为内存中的随机值)
empty_array = np.empty((2, 2))

# 创建一个给定形状和类型的数组,用 fill_value 填充
full_array = np.full((3, 3), fill_value=5)

# 创建一个给定长度的单位矩阵
eye_array = np.eye(4)

# 创建一个对角线为指定值的方阵
diag_array = np.diag([10, 20, 30, 40])

使用范围和间隔创建数组

有一些函数可以根据数字范围创建数组:

# 创建一个范围内数字的数组
arange_array = np.arange(10)  # 类似于 Python 的 range,但生成的是数组

# 创建一个在指定范围内均匀间隔的数字数组
linspace_array = np.linspace(0, 1, num=5)

# 创建一个在对数刻度上均匀间隔的数字数组
logspace_array = np.logspace(0, 1, num=5, base=10.0)

使用随机函数创建数组

NumPy 的随机模块包含了创建随机数数组的方法:

# 创建一个给定形状的随机数数组,其中的数值在 0 到 1 之间
random_array = np.random.rand(2, 3)

# 创建一个给定形状的随机整数数组
int_random_array = np.random.randint(low=0, high=10, size=(4, 4))

# 创建一个符合正态分布的随机数数组
normal_random_array = np.random.randn(3, 3)

3. 数组属性和数据类型

常用属性

shape:返回一个元组,表示数组的维度。

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

dtype:返回数组中元素的数据类型。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.dtype) # 输出 int64

ndim:返回数组的维度数量。

import numpy as np 
arr = np.array([[1, 2, 3], [4, 5, 6]]) 
print(arr.ndim) # 输出 2

size:返回数组中元素的总数。

import numpy as np 
arr = np.array([[1, 2, 3], [4, 5, 6]]) 
print(arr.size) # 输出 6

itemsize:返回数组中每个元素的字节大小。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.itemsize) # 输出 8 (对于int64类型)

nbytes:返回数组中所有元素占用的总字节数。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.nbytes) # 输出 24 (对于int64类型)

数据类型转换

基本数值类型

  • np.int8,?np.int16,?np.int32,?np.int64:分别对应 8、16、32、64 位的整数类型。
  • np.uint8,?np.uint16,?np.uint32,?np.uint64:分别对应 8、16、32、64 位的无符号整数类型。
  • np.float16,?np.float32,?np.float64:分别对应 16、32、64 位的浮点数类型。
  • np.complex64,?np.complex128:分别对应 64、128 位的复数类型,其中实部和虚部都是浮点数。

其他类型

  • np.object:表示 Python 对象类型。
  • np.string_:表示固定长度的字符串类型。
  • np.unicode_:表示固定长度的 Unicode 类型。
  • np.bool_:表示布尔类型。

????????在 NumPy 中,您可以在创建数组时指定数据类型,也可以使用 astype() 方法将一个数组从一种类型转换成另一种类型。

在创建数组时指定数据类型

import numpy as np 
arr = np.array([1, 2, 3, 4], dtype=np.float32) 
print(arr.dtype) # 输出: float32

使用?astype()?转换数据类型

arr = np.array([1.5, 2.5, 3.5, 4.5]) 
# 将浮点数组转换为整数数组 
int_arr = arr.astype(np.int32) 
print(int_arr.dtype) # 输出: int32

astype() 方法总是创建一个新的数组(一个数据类型改变了的数组的拷贝),即使你将数据类型转换成了当前数组的类型。

注意事项

????????在进行数据类型转换时,需要注意数据的溢出和精度损失。例如,如果你将一个浮点数转换为整数,小数部分将会被截断。如果你将一个大的整数转换为较小的整数类型,可能会因为溢出而得到意料之外的结果。同样,将浮点数转换为低精度的浮点数可能会导致精度损失。

文章来源:https://blog.csdn.net/sinat_34461199/article/details/135620164
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。