当前位置: 首页 > news >正文

NumPy 快速入门

如何创建

# 从Python列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])
print("从列表创建:", arr1)# 创建全零数组
zeros_arr = np.zeros(5)
print("全零数组:", zeros_arr)# 创建全一数组
ones_arr = np.ones(5)
print("全一数组:", ones_arr)# 创建指定范围的数组
range_arr = np.arange(0, 10, 2)  # 从0到10,步长为2
print("范围数组:", range_arr)# 创建等间距数组
linspace_arr = np.linspace(0, 1, 5)  # 从0到1,等分为5个点
print("等间距数组:", linspace_arr)# 创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:")
print(arr_2d)# 创建随机数组
random_arr = np.random.random(5)
print("随机数组:", random_arr)

索引和切片

一维数据的索引和切片

# 创建示例数组
arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90])
print("原始数组:", arr)# 基本索引
print("第一个元素:", arr[0])
print("最后一个元素:", arr[-1])# 切片操作 [start:stop:step]
print("前3个元素:", arr[0:3])
print("第2到第5个元素:", arr[1:5])
print("每隔一个元素:", arr[::2])
print("反转数组:", arr[::-1])# 使用布尔索引
bool_idx = arr > 50
print("大于50的元素:", arr[bool_idx])
print("直接布尔索引:", arr[arr > 50])

二维数组的索引和切片

# 创建二维数组
arr_2d = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])
print("二维数组:")
print(arr_2d)# 索引单个元素
print("第1行第2列:", arr_2d[0, 1])  # 输出: 2
print("第2行第3列:", arr_2d[1, 2])  # 输出: 7# 切片行
print("前两行:")
print(arr_2d[0:2])# 切片列
print("前两列:")
print(arr_2d[:, 0:2])# 同时切片行和列
print("第1-2行,第2-4列:")
print(arr_2d[0:2, 1:4])# 布尔索引
bool_mask = arr_2d > 5
print("大于5的元素:")
print(arr_2d[bool_mask])

运算

NumPy支持各种数学运算,这些运算都是元素级别的:

# 创建示例数组
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])print("数组a:", a)
print("数组b:", b)# 算术运算
print("加法:", a + b)
print("减法:", a - b)
print("乘法:", a * b)
print("除法:", a / b)
print("幂运算:", a ** 2)# 比较运算
print("a > b:", a > b)
print("a == b:", a == b)# 矩阵运算(二维数组)
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])print("矩阵a:")
print(matrix_a)
print("矩阵b:")
print(matrix_b)# 矩阵乘法
print("矩阵乘法:")
print(np.dot(matrix_a, matrix_b))# 或者使用 @ 运算符(Python 3.5+)
print("使用@运算符:")
print(matrix_a @ matrix_b)

基本数学函数

# 创建示例数组
arr = np.array([1, 4, 9, 16, 25])
print("原始数组:", arr)# 基本数学函数
print("平方根:", np.sqrt(arr))
print("指数:", np.exp(arr))
print("自然对数:", np.log(arr))
print("以10为底的对数:", np.log10(arr))# 三角函数
angles = np.array([0, np.pi/2, np.pi])
print("角度:", angles)
print("正弦:", np.sin(angles))
print("余弦:", np.cos(angles))
print("正切:", np.tan(angles))# 统计函数
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("数据:", data)
print("平均值:", np.mean(data))
print("中位数:", np.median(data))
print("标准差:", np.std(data))
print("方差:", np.var(data))
print("最大值:", np.max(data))
print("最小值:", np.min(data))
print("求和:", np.sum(data))
print("累积和:", np.cumsum(data))# 舍入函数
float_arr = np.array([1.234, 2.567, 3.891])
print("原始浮点数:", float_arr)
print("四舍五入:", np.round(float_arr))
print("向下取整:", np.floor(float_arr))
print("向上取整:", np.ceil(float_arr))

综合示例

综合案例一 处理学生成绩系统

# 综合示例:处理学生成绩数据
# 创建学生成绩数组(5个学生,3门课程)
grades = np.array([[85, 90, 78],[92, 88, 95],[76, 85, 80],[88, 92, 87],[95, 89, 93]])print("学生成绩表:")
print(grades)# 计算每门课程的平均分
course_avg = np.mean(grades, axis=0)
print("\n每门课程平均分:", course_avg)# 计算每个学生的平均分
student_avg = np.mean(grades, axis=1)
print("每个学生平均分:", student_avg)# 找出最高分和最低分
print("最高分:", np.max(grades))
print("最低分:", np.min(grades))# 统计超过90分的人数
excellent_count = np.sum(grades > 90)
print("超过90分的人数:", excellent_count)

综合案例2 电商销售数据分析

import numpy as np# 设置随机种子以便结果可重现
np.random.seed(42)class EcommerceSalesAnalyzer:def __init__(self):# 模拟电商销售数据:产品ID,销售额,销售量,成本,评分self.products = np.array([[101, 1500, 120, 800, 4.5],[102, 2800, 200, 1500, 4.2],[103, 4500, 300, 2500, 4.8],[104, 1200, 80, 600, 3.9],[105, 3200, 250, 1800, 4.6],[106, 1800, 150, 1000, 4.1],[107, 5000, 400, 3000, 4.9],[108, 900, 60, 400, 3.7],[109, 3800, 280, 2200, 4.4],[110, 2200, 180, 1200, 4.3]])# 列名映射self.columns = ['product_id', 'revenue', 'quantity', 'cost', 'rating']def basic_analysis(self):"""基础统计分析"""print("=== 基础统计分析 ===")# 提取各列数据revenue = self.products[:, 1]quantity = self.products[:, 2]cost = self.products[:, 3]rating = self.products[:, 4]# 计算利润profit = revenue - costself.products = np.column_stack([self.products, profit])self.columns.append('profit')print(f"总销售额: ${np.sum(revenue):,.2f}")print(f"总销售量: {np.sum(quantity):,} 件")print(f"平均每单销售额: ${np.mean(revenue):,.2f}")print(f"销售额标准差: ${np.std(revenue):,.2f}")print(f"最高销售额: ${np.max(revenue):,.2f}")print(f"最低销售额: ${np.min(revenue):,.2f}")print(f"平均评分: {np.mean(rating):.2f}")print(f"总利润: ${np.sum(profit):,.2f}")return profitdef product_segmentation(self):"""产品细分分析"""print("\n=== 产品细分分析 ===")revenue = self.products[:, 1]profit = self.products[:, 5]# 按销售额分类high_revenue_mask = revenue > 3000medium_revenue_mask = (revenue >= 1500) & (revenue <= 3000)low_revenue_mask = revenue < 1500high_revenue_products = self.products[high_revenue_mask]medium_revenue_products = self.products[medium_revenue_mask]low_revenue_products = self.products[low_revenue_mask]print(f"高销售额产品数量: {len(high_revenue_products)}")print(f"中销售额产品数量: {len(medium_revenue_products)}")print(f"低销售额产品数量: {len(low_revenue_products)}")# 找出利润率最高的产品profit_margin = profit / self.products[:, 1]max_margin_idx = np.argmax(profit_margin)min_margin_idx = np.argmin(profit_margin)print(f"\n利润率最高的产品: ID {self.products[max_margin_idx, 0]}, "f"利润率: {profit_margin[max_margin_idx]:.2%}")print(f"利润率最低的产品: ID {self.products[min_margin_idx, 0]}, "f"利润率: {profit_margin[min_margin_idx]:.2%}")return profit_margindef correlation_analysis(self):"""相关性分析"""print("\n=== 相关性分析 ===")# 计算评分与销售额的相关性rating = self.products[:, 4]revenue = self.products[:, 1]quantity = self.products[:, 2]# 使用NumPy计算相关系数rating_revenue_corr = np.corrcoef(rating, revenue)[0, 1]rating_quantity_corr = np.corrcoef(rating, quantity)[0, 1]print(f"评分与销售额的相关系数: {rating_revenue_corr:.3f}")print(f"评分与销售量的相关系数: {rating_quantity_corr:.3f}")# 解释相关性if abs(rating_revenue_corr) > 0.7:strength = "强"elif abs(rating_revenue_corr) > 0.3:strength = "中等"else:strength = "弱"print(f"评分与销售额存在{strength}相关性")return rating_revenue_corr, rating_quantity_corrdef performance_ranking(self):"""产品绩效排名"""print("\n=== 产品绩效排名 ===")# 创建产品ID和关键指标的数组product_ids = self.products[:, 0]revenue = self.products[:, 1]profit = self.products[:, 5]profit_margin = profit / revenue# 按销售额排名revenue_rank = np.argsort(revenue)[::-1]  # 降序排列print("按销售额排名:")for i, idx in enumerate(revenue_rank):rank_symbol = "🏆" if i == 0 else "🥈" if i == 1 else "🥉" if i == 2 else f"{i+1}"print(f"{rank_symbol} 产品ID {product_ids[idx]}, "f"销售额: ${revenue[idx]:,.2f}")# 按利润率排名margin_rank = np.argsort(profit_margin)[::-1]print("\n按利润率排名:")for i, idx in enumerate(margin_rank):rank_symbol = "💰" if i == 0 else "💵" if i == 1 else "💎" if i == 2 else f"{i+1}"print(f"{rank_symbol} 产品ID {product_ids[idx]}, "f"利润率: {profit_margin[idx]:.2%}")def sales_forecasting(self):"""销售预测模拟"""print("\n=== 销售预测模拟 ===")# 基于历史数据模拟下个月销售current_revenue = self.products[:, 1]growth_rate = np.random.normal(0.1, 0.05, len(current_revenue))  # 平均10%增长# 确保增长率不为负growth_rate = np.maximum(growth_rate, 0.02)  # 最低2%增长forecast_revenue = current_revenue * (1 + growth_rate)print("下个月销售预测:")for i, (current, forecast) in enumerate(zip(current_revenue, forecast_revenue)):growth_pct = (forecast - current) / current * 100trend = "📈" if growth_pct > 0 else "📉"print(f"{trend} 产品 {self.products[i, 0]}: "f"${current:,.2f} → ${forecast:,.2f} "f"({growth_pct:+.1f}%)")total_forecast = np.sum(forecast_revenue)total_growth = (total_forecast - np.sum(current_revenue)) / np.sum(current_revenue) * 100print(f"\n总销售额预测: ${total_forecast:,.2f}")print(f"预计总增长率: {total_growth:+.1f}%")return forecast_revenuedef text_based_visualization(self, profit_margin):"""文本方式的数据可视化"""print("\n=== 文本可视化 ===")revenue = self.products[:, 1]rating = self.products[:, 4]# 销售额条形图(文本版)print("\n📊 各产品销售额分布:")max_revenue = np.max(revenue)for i, rev in enumerate(revenue):bar_length = int(rev / max_revenue * 40)  # 最大40个字符bar = "█" * bar_lengthprint(f"产品 {self.products[i, 0]}: {bar} ${rev:,.2f}")# 利润率分布print("\n📈 各产品利润率:")for i, margin in enumerate(profit_margin):margin_pct = margin * 100if margin_pct > 50:symbol = "🟢"elif margin_pct > 30:symbol = "🟡"else:symbol = "🔴"print(f"产品 {self.products[i, 0]}: {symbol} {margin_pct:5.1f}%")# 评分与销售额关系print("\n🔗 评分与销售额关系:")for i, (r, rev) in enumerate(zip(rating, revenue)):print(f"产品 {self.products[i, 0]}: 评分 {r:.1f} → 销售额 ${rev:,.2f}")def generate_report(self):"""生成详细报告"""print("\n" + "="*60)print("📋 详细产品报告")print("="*60)headers = ["ID", "销售额", "销售量", "成本", "评分", "利润", "利润率"]print(f"{headers[0]:>4} {headers[1]:>10} {headers[2]:>8} {headers[3]:>8} "f"{headers[4]:>6} {headers[5]:>8} {headers[6]:>8}")print("-" * 65)for product in self.products:product_id = int(product[0])revenue = product[1]quantity = int(product[2])cost = product[3]rating = product[4]profit = product[5]margin = (profit / revenue) * 100print(f"{product_id:4d} ${revenue:8,.0f} {quantity:8d} ${cost:7,.0f} "f"{rating:6.1f} ${profit:7,.0f} {margin:7.1f}%")def run_complete_analysis(self):"""运行完整分析"""print("🔍 电商销售数据分析报告")print("=" * 50)profit = self.basic_analysis()profit_margin = self.product_segmentation()corr1, corr2 = self.correlation_analysis()self.performance_ranking()forecast = self.sales_forecasting()self.text_based_visualization(profit_margin)self.generate_report()print("\n" + "=" * 50)print("📊 分析总结:")print(f"- 产品总数: {len(self.products)}")print(f"- 平均利润率: {np.mean(profit_margin):.2%}")print(f"- 评分与销售额相关性: {corr1:.3f}")print(f"- 预计下月增长: {(np.sum(forecast)/np.sum(self.products[:, 1])-1)*100:+.1f}%")print("=" * 50)# 运行分析
if __name__ == "__main__":analyzer = EcommerceSalesAnalyzer()analyzer.run_complete_analysis()
http://www.dtcms.com/a/496727.html

相关文章:

  • python-time和datetime
  • 东莞网站建设_东莞网页设计】最好看免费观看高清大全
  • vs 2017c 怎么建设网站WordPress图片加密
  • 力扣-删除重复的电子邮箱
  • Avalonia DataGrid 控件的LostFocus事件会多次触发
  • python做网站的优势wordpress 类似的
  • 58同城网站建设的不足网站建设顾问站建
  • CRMEB-PHP批量发货技术详解
  • 高扩展集群的实现方式:硬件与软件视角
  • 美妆企业网站模板企业购物网站开发
  • 行业网站解决方案营销网站制作公司
  • 常州网站推关键词排名规则
  • Prism框架下MVVM模式中命令实现
  • 外国人的做视频网站吗主流的网站开发框架
  • 微信网站什么做盐城网站优化工作室
  • 游戏设计网站深圳网络建设公司
  • 常德网站建设制作网站设计公司有用吗
  • 肘部法找k
  • 自助建站是什么意思邯郸网站建设优化
  • 优秀的网站通过什么提供信息合肥市门户网站
  • YooAsset运行机制
  • CC12-拆分词句
  • 室内设计网站参考手机能建设网站吗
  • 做网站宁波有什么的网络公司网页设计与制作公告栏
  • 直播美颜SDK功能开发实录:自然妆感算法、人脸跟踪与AI美颜技术
  • 建设网站怎么查明细想开广告公司怎么起步
  • Monkey 综合运用参考
  • 如何做网站内页制作一个视频网站
  • seo网站首页推广跨境电商要投资多少钱
  • html5导航网站邮箱网址查询