📅  最后修改于: 2023-12-03 15:39:58.138000             🧑  作者: Mango
Python 是一种高级编程语言,经常用于数据科学,自然语言处理,机器学习等领域。而 NumPy 是 Python 中一个重要的第三方扩展库,是科学计算和数据分析的基石。
本文将介绍常见的 Python 数据类型,以及如何使用 NumPy 创建和操作数组,包括数组的索引、切片、形状、数据类型、随机数等内容。
Python 中常见的数据类型包括:
其中,列表和元组可以包含不同类型的元素,而数组只能包含相同类型的元素。
列表和元组都是序列,可以通过下标访问元素,也可以对序列进行切片操作,例如:
# 列表
lst = [1, 2, 3, 'abc', 4.5]
print(lst[0]) # 1
print(lst[1:3]) # [2, 3]
# 元组
tup = (1, 2, 3, 'abc', 4.5)
print(tup[0]) # 1
print(tup[1:3]) # (2, 3)
与列表和元组不同,NumPy 中的数组只能包含相同类型的元素。创建数组时可以指定元素类型,例如:
import numpy as np
# 创建整数数组
arr_int = np.array([1, 2, 3])
print(arr_int.dtype) # int64
# 创建浮点数数组
arr_float = np.array([1.0, 2.0, 3.0])
print(arr_float.dtype) # float64
数组的类型一旦确定,就不能改变。如果向数组中添加了不同类型的元素,会自动转换为同一类型,例如:
arr = np.array([1, 2, 3])
arr[0] = 1.5
print(arr) # [1 2 3]
数组的索引和切片方式与列表和元组类似,例如:
arr = np.array([1, 2, 3, 4, 5])
print(arr[0]) # 1
print(arr[1:3]) # [2 3]
print(arr[arr>3]) # [4 5]
其中,数组的切片操作返回的是原数组的一个视图(view),而不是拷贝。这意味着修改切片的值会同时修改原数组的值,例如:
arr = np.array([1, 2, 3, 4, 5])
arr_slice = arr[1:3]
arr_slice[0] = 10
print(arr) # [ 1 10 3 4 5]
数组的形状(shape)是指数组每个维度的大小,可以通过 shape
属性查看数组的形状,例如:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # (2, 3)
数组的轴(axis)是指数组的维度。例如,二维数组有两个轴,第一个轴对应行,第二个轴对应列。可以通过 ndim
属性查看数组的轴数,例如:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 2
可以使用 reshape
方法改变数组的形状,例如:
arr = np.array([1, 2, 3, 4, 5, 6])
arr2 = arr.reshape((2, 3))
print(arr2)
# [[1 2 3]
# [4 5 6]]
如果改变数组的形状后访问了数组的某个元素,则会报错,例如:
arr = np.array([1, 2, 3, 4, 5, 6])
arr2 = arr.reshape((2, 3))
print(arr2[2, 1])
# IndexError: index 2 is out of bounds for axis 0 with size 2
数组的数据类型可以通过 dtype
属性查看,例如:
arr = np.array([1, 2, 3])
print(arr.dtype) # int64
可以使用 astype
方法将数组转换为指定的数据类型,例如:
arr = np.array([1, 2, 3])
arr2 = arr.astype(np.float32)
print(arr2) # [1. 2. 3.]
NumPy 支持数组的数值运算,包括加减乘除、矩阵乘法、平方、开方等运算。例如:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 加减乘除
print(arr1 + arr2) # [5 7 9]
print(arr1 - arr2) # [-3 -3 -3]
print(arr1 * arr2) # [ 4 10 18]
print(arr1 / arr2) # [0.25 0.4 0.5 ]
# 点积和叉积
print(np.dot(arr1, arr2)) # 32
print(np.cross(np.array([1, 0, 0]), np.array([0, 1, 0]))) # [0 0 1]
# 平方和开方
print(arr1**2) # [1 4 9]
print(np.sqrt(arr1)) # [1. 1.41421356 1.73205081]
NumPy 提供了多种产生随机数的函数,可以产生不同分布的随机数序列。
# 产生 100 个 [0, 1) 范围内的随机数
print(np.random.rand(100))
# 产生 2x2 的矩阵的随机数
print(np.random.rand(2, 2))
# 产生 10 个均值为 0,标准差为 1 的正态分布随机数
print(np.random.randn(10))
# 产生指定均值和标准差的正态分布随机数
print(np.random.normal(loc=0.0, scale=1.0, size=10))
本文介绍了从 Python 到 NumPy 的数据类型、数组的索引和切片、形状和维度、数据类型和转换、数值运算、随机数等内容。NumPy 是一款强大的科学计算库,掌握其使用方法对于数据科学工作者非常重要。