网站建设怎么做?,二手交易网站开发可参考文献,wordpress页面关键词,安卓是哪里开发的项目 1#xff1a;图像灰度化与边缘检测#xff08;基础#xff09;目标用纯 NumPy 实现彩色图像转灰度图#xff0c;并进行简单边缘检测#xff08;Sobel 算子#xff09;。知识点数组切片与广播卷积#xff08;手动实现#xff09;图像作为 3D 数组#xff08;HWC图像灰度化与边缘检测基础目标用纯 NumPy 实现彩色图像转灰度图并进行简单边缘检测Sobel 算子。知识点数组切片与广播卷积手动实现图像作为 3D 数组H×W×C步骤import numpy as npimport matplotlib.pyplot as pltfrom PIL import Image# 1. 加载图像可用任意本地图片或生成模拟数据# 若无图片用随机数组模拟img np.random.randint(0, 256, (200, 200, 3), dtypenp.uint8)# 2. 转灰度加权平均R*0.299 G*0.587 B*0.114gray np.dot(img[...,:3], [0.299, 0.587, 0.114]).astype(np.uint8)# 3. Sobel 边缘检测手动卷积def sobel_edge(gray):# Sobel 核Kx np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])Ky np.array([[-1,-2,-1],[ 0, 0, 0],[ 1, 2, 1]])h, w gray.shapeedges np.zeros_like(gray, dtypenp.float32)# 手动卷积忽略边界for i in range(1, h-1):for j in range(1, w-1):gx np.sum(Kx * gray[i-1:i2, j-1:j2])gy np.sum(Ky * gray[i-1:i2, j-1:j2])edges[i, j] np.sqrt(gx**2 gy**2)return edges.astype(np.uint8)edges sobel_edge(gray)# 4. 可视化fig, axs plt.subplots(1, 3, figsize(12, 4))axs[0].imshow(img)axs[0].set_title(Original)axs[1].imshow(gray, cmapgray)axs[1].set_title(Grayscale)axs[2].imshow(edges, cmapgray)axs[2].set_title(Edges)plt.show()✅ 进阶挑战用 np.lib.stride_tricks.sliding_window_view 实现无循环卷积大幅提升速度 项目 2股票收益率分析统计与金融目标模拟股票价格计算日收益率、波动率、最大回撤等指标。知识点随机游走模拟百分比变化 np.diff / np.log统计函数std, max, argmin布尔索引步骤import numpy as npimport matplotlib.pyplot as plt# 1. 模拟股价几何布朗运动简化版np.random.seed(42)n_days 252 # 一年交易日returns np.random.normal(loc0.001, scale0.02, sizen_days) # 日收益率price 100 * np.exp(np.cumsum(returns)) # 初始价100# 2. 计算关键指标daily_returns np.diff(price) / price[:-1] # 或直接用 returnsvolatility np.std(daily_returns) * np.sqrt(252) # 年化波动率max_drawdown np.min(price / np.maximum.accumulate(price) - 1)print(f年化波动率: {volatility:.2%})print(f最大回撤: {max_drawdown:.2%})# 3. 绘制价格与回撤曲线peak np.maximum.accumulate(price)drawdown (price - peak) / peakfig, ax1 plt.subplots(figsize(10, 6))ax1.plot(price, b-, labelPrice)ax1.set_ylabel(Price, colorb)ax2 ax1.twinx()ax2.fill_between(range(len(drawdown)), drawdown, 0, colorr, alpha0.3, labelDrawdown)ax2.set_ylabel(Drawdown, colorr)plt.title(Stock Price Drawdown)plt.show()✅ 扩展加入多只股票计算协方差矩阵和投资组合风险。 项目 3地理距离矩阵计算广播与向量化目标给定多个城市的经纬度计算所有城市对之间的球面距离Haversine 公式。知识点广播机制三角函数向量化替代嵌套循环步骤import numpy as np# 1. 城市数据经度, 纬度单位度cities np.array([[116.4, 39.9], # 北京[121.5, 31.2], # 上海[113.3, 23.1], # 广州[106.5, 29.6] # 重庆])# 转为弧度lat np.radians(cities[:, 1])lon np.radians(cities[:, 0])# 2. 使用广播计算所有配对lat1 lat[:, np.newaxis] # (4,1)lat2 lat[np.newaxis, :] # (1,4)lon1 lon[:, np.newaxis]lon2 lon[np.newaxis, :]# Haversine 公式dlat lat2 - lat1dlon lon2 - lon1a np.sin(dlat/2)**2 np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2c 2 * np.arctan2(np.sqrt(a), np.sqrt(1-a))distance_km 6371 * c # 地球半径 ≈ 6371 km# 3. 输出距离矩阵city_names [Beijing, Shanghai, Guangzhou, Chongqing]print(Distance Matrix (km):)print(f{:12} .join(f{name:12} for name in city_names))for i, name in enumerate(city_names):row .join(f{distance_km[i,j]:12.1f} for j in range(len(city_names)))print(f{name:12}{row})✅ 优势无循环O(1) 内存扩展相比 O(n²) 循环 项目 4主成分分析PCA从零实现目标不用 sklearn仅用 NumPy 实现 PCA用于降维。知识点中心化协方差矩阵特征值分解投影步骤import numpy as npimport matplotlib.pyplot as plt# 1. 生成模拟数据2Dnp.random.seed(0)X np.random.randn(100, 2) np.array([[2, 1], [1, 1]]) # 相关数据# 2. PCA 实现def pca(X, n_components2):# 中心化X_centered X - X.mean(axis0)# 协方差矩阵cov np.cov(X_centered.T) # 注意np.cov 默认按行是变量# 特征分解eigenvals, eigenvecs np.linalg.eigh(cov) # 对称矩阵用 eigh 更稳定# 按特征值降序排序idx np.argsort(eigenvals)[::-1]components eigenvecs[:, idx[:n_components]]# 投影X_pca X_centered componentsreturn X_pca, components, eigenvals[idx]X_pca, comps, vals pca(X, n_components2)# 3. 可视化plt.figure(figsize(8, 4))plt.subplot(1, 2, 1)plt.scatter(X[:, 0], X[:, 1], alpha0.7)plt.title(Original Data)plt.subplot(1, 2, 2)plt.scatter(X_pca[:, 0], X_pca[:, 1], alpha0.7, cred)plt.title(PCA Transformed)plt.axhline(0, colork, linewidth0.5)plt.axvline(0, colork, linewidth0.5)plt.show()print(Explained variance ratio:, vals / vals.sum())✅ 理解核心PCA 数据旋转到方差最大方向。⚡ 项目 5性能对比 —— 循环 vs 向量化 vs Numba目标对比三种方式计算两个大数组的欧氏距离效率。知识点性能分析time.time()向量化优势可选Numba JIT 加速步骤import numpy as npimport time# 数据N 1000000a np.random.rand(N, 3)b np.random.rand(N, 3)# 方法1Python 循环慢def euclidean_loop(a, b):dists []for i in range(len(a)):d np.sqrt((a[i,0]-b[i,0])**2 (a[i,1]-b[i,1])**2 (a[i,2]-b[i,2])**2)dists.append(d)return np.array(dists)# 方法2NumPy 向量化快def euclidean_vectorized(a, b):return np.sqrt(np.sum((a - b)**2, axis1))# 方法3使用 scipy.spatial.distance可选# from scipy.spatial.distance import cdist# dists np.diag(cdist(a, b))# 测试start time.time()# dist1 euclidean_loop(a, b) # 跳过太慢# print(Loop time:, time.time() - start)start time.time()dist2 euclidean_vectorized(a, b)print(Vectorized time:, time.time() - start)# 验证结果一致# print(Max diff:, np.max(np.abs(dist1 - dist2))) 典型结果向量化比循环快 100~1000 倍✅ 扩展尝试用 numba.jit 加速循环版本看能否接近向量化性能。 学习建议项目 推荐顺序 巩固知识点1. 图像处理 1 广播、切片、基础数学2. 金融统计 2 随机数、统计函数、累积操作3. 地理距离 3 广播高级应用4. PCA 4 线性代数、特征分解5. 性能对比 5 向量化思想、性能意识 总结这些项目覆盖了 NumPy 的核心能力数组作为通用容器