Python学习(二)


Day 2 numpy创建数组、索引、广播

建议用 Jupyter Notebook 边敲边记。启动方式:bash输入

conda activate ai_env
jupyter notebook

然后在浏览器里新建一个 Python 3 笔记本,把今天的所有代码按章节写在一个 .ipynb 文件里,方便复习。

1️⃣ 热身:导入 NumPy 并检查版本(5 分钟)

在第一个 cell 里输入:

import numpy as np
print(np.__version__)

运行(Shift+Enter),看到版本号(如 2.4.3)即可。

2️⃣ 创建数组(40 分钟)

掌握以下 8 种创建方式,每种手打一遍并观察输出。

# 1. 从列表创建
a = np.array([1, 2, 3])
print("1D array:", a)

# 2. 二维数组
b = np.array([[1,2,3], [4,5,6]])
print("2D array:\n", b)

# 3. 全零矩阵
zeros = np.zeros((3, 4))
print("zeros:\n", zeros)

# 4. 全一矩阵
ones = np.ones((2, 3))
print("ones:\n", ones)

# 5. 单位矩阵
eye = np.eye(4)   # 4x4 对角线上为1
print("eye:\n", eye)

# 6. 等间隔数组(类似 range)
ar = np.arange(0, 10, 2)   # 起始0,终止10(不含),步长2
print("arange:", ar)

# 7. 线性间隔(等分)
lin = np.linspace(0, 1, 5)  # 0到1之间均匀取5个点
print("linspace:", lin)

# 8. 随机数
rand = np.random.rand(3, 3)   # 0~1均匀分布
randn = np.random.randn(3, 3) # 标准正态分布
print("random uniform:\n", rand)
print("random normal:\n", randn)

3️⃣ 数组索引与切片(50 分钟)

基本索引(类似 Python 列表)

arr = np.arange(10)
print(arr[0])    # 第一个元素
print(arr[-1])   # 最后一个
print(arr[2:5])  # 索引 2,3,4

二维索引

mat = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(mat[0, 1])    # 第0行第1列 → 2
print(mat[1])       # 第1行 → [4,5,6]
print(mat[:, 0])    # 所有行的第0列 → [1,4,7]
print(mat[0:2, 1:3]) # 0~1行,1~2列 → [[2,3],[5,6]]

花式索引(整数数组索引)

arr = np.array([10, 20, 30, 40, 50])
idx = [0, 2, 4]
print(arr[idx])   # [10 30 50]

# 二维花式索引
mat = np.arange(12).reshape(3, 4)
rows = [0, 2]
cols = [1, 3]
print(mat[rows, cols])   # 取 (0,1) 和 (2,3) 两个元素

布尔索引(非常重要)

arr = np.array([1, 5, 2, 8, 3])
mask = arr > 3
print(mask)               # [False  True False  True False]
print(arr[mask])          # [5 8]  选出所有大于3的元素

# 实际应用:替换
arr[arr > 3] = 99
print(arr)                # [1 99 2 99 3]

练习

randomMat = np.random.rand(5, 5) # 创建一个随机的 5 * 5矩阵
print("原始矩阵:\n", randomMat)
randomMat[randomMat > 0.5] = 0 # # 将所有大于 0.5 的元素替换为 0 
print(randomMat)
print("是否还有大于0.5的元素?", np.any(randomMat > 0.5))

# 原始矩阵:
 [[0.24105789 0.86278547 0.61101981 0.63600007 0.51729033]
 [0.51432014 0.53458585 0.13090915 0.89073187 0.4918729 ]
 [0.88033846 0.14628945 0.92441329 0.21437359 0.14920108]
 [0.80158892 0.41307432 0.09961127 0.22901789 0.98483656]
 [0.6531539  0.62407493 0.3365452  0.80032319 0.93666646]]
[[0.24105789 0.         0.         0.         0.        ]
 [0.         0.         0.13090915 0.         0.4918729 ]
 [0.         0.14628945 0.         0.21437359 0.14920108]
 [0.         0.41307432 0.09961127 0.22901789 0.        ]
 [0.         0.         0.3365452  0.         0.        ]]
是否还有大于0.5的元素? False

声明:Xuhao's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Python学习(二)


Carpe Diem and Do what I like