NumPy ndarray
NumPy是Python编程语言的一个库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy的核心功能之一是ndarray
对象,这是一个多维数组对象,提供了数组级别的数学运算和复杂广播能力。
1. 创建ndarray
NumPy提供了多种方式来创建数组,最简单的方式是使用np.array()
函数,直接通过列表来创建数组。
示例代码1:使用np.array()创建数组
import numpy as np
# 创建一维数组
array_1d = np.array([1, 2, 3, 4, 5])
print(array_1d)
# 创建二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(array_2d)
Output:
示例代码2:使用np.zeros()创建全零数组
import numpy as np
# 创建一个3x4的全零二维数组
zero_array = np.zeros((3, 4))
print(zero_array)
Output:
示例代码3:使用np.ones()创建全一数组
import numpy as np
# 创建一个2x3的全一二维数组
ones_array = np.ones((2, 3))
print(ones_array)
Output:
示例代码4:使用np.arange()创建数组
import numpy as np
# 创建一个从0到10,步长为2的一维数组
range_array = np.arange(0, 10, 2)
print(range_array)
Output:
示例代码5:使用np.linspace()创建等间隔数组
import numpy as np
# 创建一个从0到1,总共5个元素的等间隔一维数组
linspace_array = np.linspace(0, 1, 5)
print(linspace_array)
Output:
2. 数组的形状和重塑
数组的形状是一个非常重要的属性,因为它定义了数组的维度和每个维度的大小。NumPy提供了多种方式来查看和修改数组的形状。
示例代码6:查看数组形状
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.shape)
Output:
示例代码7:重塑数组
import numpy as np
array = np.arange(6)
reshaped_array = array.reshape((2, 3))
print(reshaped_array)
Output:
示例代码8:扁平化数组
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]])
flattened_array = array.flatten()
print(flattened_array)
Output:
3. 数组的索引和切片
数组的索引和切片是访问数组元素的重要方式。NumPy提供了多种索引方式,包括基本的索引、切片以及布尔索引等。
示例代码9:基本索引
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array[0, 1])
Output:
示例代码10:切片索引
import numpy as np
array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
slice_array = array[1:3, 1:3]
print(slice_array)
Output:
示例代码11:布尔索引
import numpy as np
array = np.array([1, 2, 3, 4, 5, 6])
bool_index = array > 3
filtered_array = array[bool_index]
print(filtered_array)
Output:
4. 数组的数学运算
NumPy支持数组级别的数学运算,这些运算可以直接应用于数组对象上。这包括基本的算术运算、统计运算、线性代数运算等。
示例代码12:数组加法
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
sum_array = np.add(array1, array2)
print(sum_array)
Output:
示例代码13:数组乘法
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
product_array = np.multiply(array1, array2)
print(product_array)
Output:
示例代码14:数组的点积
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
dot_product = np.dot(array1, array2)
print(dot_product)
Output:
示例代码15:数组的转置
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]])
transposed_array = np.transpose(array)
print(transposed_array)
Output:
示例代码16:数组的逆
import numpy as np
array = np.array([[1, 2], [3, 4]])
inverse_array = np.linalg.inv(array)
print(inverse_array)
Output:
5. 广播
广播是NumPy中一个强大的机制,它允许numpy在执行算术运算时使用不同形状的数组。当操作两个数组时,numpy会逐个维度比较它们的形状,遵循一定的广播规则。
示例代码17:广播加法
import numpy as np
array1 = np.array([[1, 2, 3]])
array2 = np.array([[1], [2], [3]])
broadcasted_sum = np.add(array1, array2)
print(broadcasted_sum)
Output:
示例代码18:广播乘法
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([[1], [2], [3]])
broadcasted_product = np.multiply(array1, array2)
print(broadcasted_product)
Output:
6. 高级功能
NumPy还提供了一些高级功能,如掩码数组、结构化数组等,这些功能使得NumPy在处理复杂数据时更加强大。
示例代码19:使用掩码数组
import numpy as np
array = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])
masked_array = np.ma.array(array, mask=mask)
print(masked_array)
Output:
示例代码20:创建结构化数组
import numpy as np
dtype = [('name', 'S10'), ('age', 'i4'), ('height', 'f4')]
values = [('Alice', 24, 5.5), ('Bob', 30, 5.9), ('Cathy', 22, 5.2)]
structured_array = np.array(values, dtype=dtype)
print(structured_array)
Output:
以上就是关于NumPy的ndarray
对象的详细介绍,包括创建数组、数组操作、索引、切片、数学运算、广播以及一些高级功能。通过这些基础和高级的操作,我们可以对数组进行灵活的处理,满足各种数据处理和科学计算的需求。
7. 数组的排序
NumPy提供了多种排序算法,包括快速排序、归并排序、堆排序等。我们可以通过np.sort()
函数来对数组进行排序。
示例代码21:数组排序
import numpy as np
array = np.array([3, 1, 2, 5, 4])
sorted_array = np.sort(array)
print(sorted_array)
Output:
8. 数组的连接和分割
NumPy提供了多种方式来连接和分割数组,包括np.concatenate()
、np.split()
等函数。
示例代码22:数组连接
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
concatenated_array = np.concatenate((array1, array2))
print(concatenated_array)
Output:
示例代码23:数组分割
import numpy as np
array = np.array([1, 2, 3, 4, 5, 6])
split_arrays = np.split(array, 2)
print(split_arrays)
Output:
9. 数组的迭代
NumPy提供了多种方式来迭代数组,包括基本的for循环迭代,以及np.nditer()
函数提供的高级迭代方式。
示例代码24:基本迭代
import numpy as np
array = np.array([1, 2, 3, 4, 5])
for element in array:
print(element)
Output:
示例代码25:高级迭代
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6]])
for element in np.nditer(array):
print(element)
Output:
10. 数组的文件输入输出
NumPy提供了多种方式来保存和加载数组,包括np.save()
、np.load()
等函数。
示例代码26:保存数组到文件
import numpy as np
array = np.array([1, 2, 3, 4, 5])
np.save('numpyarray.com.npy', array)
示例代码27:从文件加载数组
import numpy as np
array = np.load('numpyarray.com.npy')
print(array)
Output:
以上就是关于NumPy的ndarray
对象的详细介绍,通过这些基础和高级的操作,我们可以对数组进行灵活的处理,满足各种数据处理和科学计算的需求。