📜  数据字典 python 到 numpy - Python (1)

📅  最后修改于: 2023-12-03 15:39:58.138000             🧑  作者: Mango

数据字典:从 Python 到 NumPy

介绍

Python 是一种高级编程语言,经常用于数据科学,自然语言处理,机器学习等领域。而 NumPy 是 Python 中一个重要的第三方扩展库,是科学计算和数据分析的基石。

本文将介绍常见的 Python 数据类型,以及如何使用 NumPy 创建和操作数组,包括数组的索引、切片、形状、数据类型、随机数等内容。

Python 数据类型

Python 中常见的数据类型包括:

  • 整数(int)
  • 浮点数(float)
  • 复数(complex)
  • 布尔值(bool)
  • 字符串(str)
  • 列表(list)
  • 元组(tuple)
  • 集合(set)
  • 字典(dict)

其中,列表和元组可以包含不同类型的元素,而数组只能包含相同类型的元素。

列表和元组

列表和元组都是序列,可以通过下标访问元素,也可以对序列进行切片操作,例如:

# 列表
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 是一款强大的科学计算库,掌握其使用方法对于数据科学工作者非常重要。