第三章:ndarray 的创建 第三章:ndarray 的创建 NumPy 的核心是 (n-dimensional array object),它是一个高效的多维数组容器,用于存储和处理数值数据。要使用 NumPy,首先需要创建 对象。本章将深入探讨创建 的各种方法。 3.1 从 Python 列表或元组创建 这是最基本也是最常用的创建 的方法。 代码实践: 内容详解: 函数接受一个列表或元组作为输入,并尝试创建一个新的 。 NumPy 会自动推断数组的数据类型,但也可以使用 参数显式指定。 当创建多维数组时,输入必须是具有相同长度的列表的列表(或元组的元组)。否则,NumPy 会创建一个包含 Python 对象(例如列表)的 ,这通常不是期望的行为,并且会降低性能。
NumPy 的核心是 ndarray(n-dimensional array object),它是一个高效的多维数组容器,用于存储和处理数值数据。要使用 NumPy,首先需要创建 ndarray 对象。本章将深入探讨创建 ndarray 的各种方法。
这是最基本也是最常用的创建 ndarray 的方法。
代码实践:
import numpy as np # 从 Python 列表创建 list_data = [1, 2, 3, 4, 5] arr_from_list = np.array(list_data) print("From List:\n", arr_from_list) print("Data Type:", arr_from_list.dtype) # 默认数据类型 # 从 Python 元组创建 tuple_data = (6, 7, 8, 9, 10) arr_from_tuple = np.array(tuple_data) print("\nFrom Tuple:\n", arr_from_tuple) # 创建二维数组 list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] arr_2d = np.array(list_of_lists) print("\n2D Array:\n", arr_2d) # 指定数据类型 arr_float = np.array(list_data, dtype=np.float64) print("\nFloat Array:\n", arr_float) print("Data Type:", arr_float.dtype) # 不同长度的列表将创建object类型的ndarray list_of_lists_diff_len = [[1, 2, 3], [4, 5], [7, 8, 9, 10]] arr_diff_len = np.array(list_of_lists_diff_len) print("\nArray with different length lists:\n", arr_diff_len) print("Data Type:", arr_diff_len.dtype)
内容详解:
np.array() 函数接受一个列表或元组作为输入,并尝试创建一个新的 ndarray。
NumPy 会自动推断数组的数据类型,但也可以使用 dtype 参数显式指定。
当创建多维数组时,输入必须是具有相同长度的列表的列表(或元组的元组)。否则,NumPy 会创建一个包含 Python 对象(例如列表)的 ndarray,这通常不是期望的行为,并且会降低性能。
Graph TD 图示:
NumPy 提供了许多内置函数,用于创建具有特定形状和初始值的 ndarray。
代码实践:
import numpy as np # 创建全零数组 zeros_arr = np.zeros((3, 4)) # 3 行 4 列 print("Zeros Array:\n", zeros_arr) # 创建全一数组 ones_arr = np.ones((2, 3), dtype=np.int32) print("\nOnes Array:\n", ones_arr) # 创建未初始化数组 (值是内存中的随机值) empty_arr = np.empty((2, 2)) print("\nEmpty Array:\n", empty_arr) # 创建单位矩阵 identity_matrix = np.eye(3) print("\nIdentity Matrix:\n", identity_matrix) # 创建对角矩阵 diag_matrix = np.diag([1, 2, 3]) print("\nDiagonal Matrix:\n", diag_matrix)
内容详解:
np.zeros(shape) 创建一个给定形状的全零数组。
np.ones(shape) 创建一个给定形状的全一数组。
np.empty(shape) 创建一个给定形状的未初始化数组。这些数组的值是内存中的随机值,因此在使用前需要小心。
np.eye(N) 创建一个 N x N 的单位矩阵(对角线为 1,其余为 0)。
np.diag(v) 创建一个对角矩阵,其中对角线上的元素是 v 中的元素。
Graph TD 图示:
arange 和 linspace 创建数值序列arange 和 linspace 函数用于创建等间隔的数值序列。
代码实践:
import numpy as np # 使用 arange 创建 arr_arange = np.arange(10) # 0 到 9 print("Arange Array:\n", arr_arange) arr_arange_step = np.arange(0, 20, 2) # 0 到 18,步长为 2 print("\nArange Array with Step:\n", arr_arange_step) # 使用 linspace 创建 arr_linspace = np.linspace(0, 1, 5) # 0 到 1,包含 5 个等间隔的数 print("\nLinspace Array:\n", arr_linspace)
内容详解:
np.arange(start, stop, step) 创建一个从 start 到 stop(不包含)的数组,步长为 step。如果只提供一个参数,则默认为 stop,start 为 0,step 为 1。
np.linspace(start, stop, num) 创建一个从 start 到 stop(包含)的数组,包含 num 个等间隔的数。
Graph TD 图示:
NumPy 的 random 模块提供了各种随机数生成函数,用于创建包含随机数的 ndarray。
代码实践:
import numpy as np # 创建 0 到 1 之间的随机数数组 rand_arr = np.random.rand(2, 3) # 2 行 3 列 print("Random Array (0-1):\n", rand_arr) # 创建服从标准正态分布的随机数数组 randn_arr = np.random.randn(3, 3) print("\nRandom Array (Normal Distribution):\n", randn_arr) # 创建指定范围内的随机整数数组 randint_arr = np.random.randint(1, 10, size=(2, 4)) # 1 到 9 之间的整数 print("\nRandom Integer Array:\n", randint_arr)
内容详解:
np.random.rand(shape) 创建一个给定形状的数组,其中包含 0 到 1 之间的均匀分布的随机数。
np.random.randn(shape) 创建一个给定形状的数组,其中包含服从标准正态分布(均值为 0,标准差为 1)的随机数。
np.random.randint(low, high, size) 创建一个给定形状的数组,其中包含 low(包含)到 high(不包含)之间的随机整数。
Graph TD 图示:
可以通过复制或转换已有的数组来创建新的 ndarray。
代码实践:
import numpy as np # 从已有的数组创建 existing_arr = np.array([1, 2, 3, 4, 5]) # 复制数组 copied_arr = np.copy(existing_arr) print("Copied Array:\n", copied_arr) # 转换数组类型 float_arr = existing_arr.astype(np.float64) print("\nFloat Array:\n", float_arr) # 改变数组形状 reshaped_arr = existing_arr.reshape((5, 1)) print("\nReshaped Array:\n", reshaped_arr)
内容详解:
np.copy(arr) 创建一个数组的深拷贝。修改拷贝后的数组不会影响原始数组。
arr.astype(dtype) 创建一个具有指定数据类型的新数组。
arr.reshape(shape) 创建一个具有新形状的新数组,但不改变原始数组的数据。
Graph TD 图示:
NumPy 提供了函数用于从文件中读取数据并创建 ndarray。
代码实践:
import numpy as np # 创建一个示例数据文件 data = np.array([[1, 2, 3], [4, 5, 6]]) np.savetxt('data.txt', data, delimiter=',') # 从文件中读取数据 loaded_data = np.loadtxt('data.txt', delimiter=',') print("Loaded Data:\n", loaded_data)
内容详解:
np.loadtxt(filename, delimiter) 从文本文件中加载数据,delimiter 指定分隔符。
np.savetxt(filename, array, delimiter) 将数组保存到文本文件中。
Graph TD 图示:
本章介绍了创建 ndarray 的各种方法,包括从 Python 列表或元组创建、使用 NumPy 内置函数创建、使用 arange 和 linspace 创建数值序列、使用随机数生成函数创建、从已有的数组创建以及从文件中读取数据创建。选择哪种方法取决于具体的需求和数据来源。 掌握这些方法对于高效地使用 NumPy 进行数值计算至关重要。