3. 数组属性
ndarray
对象具有多种属性,可以获取数组的信息:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
print(arr.size)
print(arr.ndim)
print(arr.dtype)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
4. 数组索引和切片
NumPy
数组支持多维索引和切片操作。
a) 一维数组索引
arr = np.array([1, 2, 3, 4, 5])
print(arr[0])
print(arr[-1])
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 多维数组索引
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d[0, 2])
print(arr_2d[1, -1])
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
c) 切片
arr = np.array([1, 2, 3, 4, 5])
print(arr[1:4])
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[0:2, 1:3])
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
5. 数学运算
NumPy
可以对数组进行广播机制下的运算。
a) 数组的基本运算
arr = np.array([1, 2, 3])
print(arr + 2)
print(arr * 3)
print(arr ** 2)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 数组之间的运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2)
print(arr1 * arr2)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
c) 通用函数 (Universal Functions)
NumPy
提供了许多通用的数学函数,可以应用于数组的每个元素,例如 sin()
、exp()
、sqrt()
等。
arr = np.array([1, 2, 3])
print(np.sin(arr))
print(np.exp(arr))
print(np.sqrt(arr))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
6. 数组的形状操作
NumPy
提供了许多工具来改变数组的形状。
a) reshape()
改变数组形状
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 数组转置
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.T)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
7. 数组的合并和分割
NumPy
支持对数组的合并和分割操作。
a) 数组的合并
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr)
hstack_arr = np.hstack((arr1, arr2.T))
print(hstack_arr)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 数组的分割
arr = np.array([[1, 2, 3], [4, 5, 6]])
vsplit_arr = np.vsplit(arr, 2)
print(vsplit_arr)
hsplit_arr = np.hsplit(arr, 3)
print(hsplit_arr)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
8. 布尔索引和条件过滤
NumPy 支持布尔条件筛选和索引操作。
arr = np.array([1, 2, 3, 4, 5])
print(arr[arr > 3])
arr[arr > 3] = 0
print(arr)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
9. 常用的统计函数
NumPy
提供了丰富的统计函数,方便对数组进行统计计算。
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr))
print(np.sum(arr))
print(np.std(arr))
print(np.min(arr))
print(np.max(arr))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
10. 随机数生成
NumPy
的 random
模块提供了生成随机数的功能。
print(np.random.rand())
print(np.random.randn())
print(np.random.randint(0, 10, (3, 3)))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
11. 广播机制
NumPy
具有广播(broadcasting)机制,是指当操作的两个数组形状不同,但其中一个数组的形状可以通过重复某些维度的元素来匹配另一个数组的形状时,NumPy 会自动进行元素扩展,执行操作。
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
result = a + b
print(result)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
12. 数组的矩阵运算
NumPy 中的矩阵运算功能包括矩阵乘法、矩阵转置、求逆等常见的线性代数操作。特别适用于科学计算和机器学习中使用的线性代数方法。
a) 矩阵乘法
@ 符号或 np.dot() 函数可用于矩阵乘法。
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B
print(C)
D = np.dot(A, B)
print(D)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 矩阵转置
A_T = A.T
print(A_T)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
d) 计算行列式
使用 np.linalg.det() 计算矩阵的行列式。
A = np.array([[1, 2], [3, 4]])
det_A = np.linalg.det(A)
print(det_A)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
e) 特征值和特征向量
使用 np.linalg.eig() 来计算矩阵的特征值和特征向量。
A = np.array([[1, 2], [3, 4]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
12. 数组的排序和条件筛选
a) 排序
使用 np.sort() 函数对数组进行排序。该函数会返回一个排序后的数组,而不会修改原数组。
a = np.array([3, 1, 2, 4])
sorted_a = np.sort(a)
print(sorted_a)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
b) 条件筛选
NumPy 提供了灵活的条件筛选操作,可以用布尔数组来选择满足条件的元素。
a = np.array([1, 2, 3, 4, 5])
filtered_a = a[a > 2]
print(filtered_a)
b = np.where(a > 2, a, -1)
print(b)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: