首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,272 阅读
2
类的加载
832 阅读
3
Spring Cloud OAuth2.0
827 阅读
4
SpringBoot自动装配原理
735 阅读
5
集合不安全问题
631 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
OpenCV
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Canvas
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
ndarray
蘇阿細
累计撰写
435
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
页面
统计
关于
搜索到
39
篇与
的结果
2025-11-23
三、pandas-Series-案例
(1)学生成绩统计创建一个包含10名学生成绩的Series,成绩范围在50 - 100之间。计算平均分、最高分、最低分,并找出高于平均分的学生人数。import numpy as np import pandas as pd # 生成随机成绩 np.random.seed(1) scores = pd.Series(np.random.randint(50, 101, 10), index=['学生' + str(i) for i in range(1, 11)]) print(scores) 学生1 87 学生2 93 学生3 62 学生4 58 学生5 59 学生6 61 学生7 55 学生8 65 学生9 50 学生10 66 dtype: int32mean_score = scores.mean() print("平均分:", mean_score) print("最高分:", scores.max()) print("最低分:", scores.min()) print("成绩高于平均分的学生人数:", scores[scores > mean_score].count()) 平均分: 65.6 最高分: 93 最低分: 50 成绩高于平均分的学生人数: 3(2)温度数据分析给定某城市一周中每天的最高温度Series,计算温度超过30°的天数,平均温度,温度由高到低排序,并找出温度变化最大的两天import numpy as np import pandas as pd # 温度 temperature = pd.Series([28, 26, 33, 31, 32, 30, 27], index=['周一', '周二', '周三', '周四', '周五', '周六', '周日', ]) print(temperature) 周一 28 周二 26 周三 33 周四 31 周五 32 周六 30 周日 27 dtype: int64print("温度超过30°的天数:", temperature[temperature > 30].count()) print("平均温度:", round(temperature.mean(), 1)) # ascending=False 降序 temperature_sort = temperature.sort_values(ascending=False) print(temperature_sort) # 计算相邻两天的温度差值 temperature_diff = temperature.diff().abs() temperature_diff_sort = temperature_diff.sort_values(ascending=False) print("温度变化最大的两天:", temperature_diff_sort.index[:2].tolist()) 温度超过30°的天数: 3 平均温度: 29.6 周三 33 周五 32 周四 31 周六 30 周一 28 周日 27 周二 26 dtype: int64 温度变化最大的两天: ['周三', '周日'](3)股票价格分析给定某股票连续10个交易日的收盘价Series,计算每日收益率(当日收盘价/前日收盘价 - 1),找出收益率最高和最低的日期,计算波动率(收益率标准差)import numpy as np import pandas as pd prices = pd.Series([105.2, 103.1, 104.6, 102.9, 101.9, 106, 108.2, 105.1, 104.6, 102.9], index=pd.date_range('2025-10-01', periods=10)) print(prices) 2025-10-01 105.2 2025-10-02 103.1 2025-10-03 104.6 2025-10-04 102.9 2025-10-05 101.9 2025-10-06 106.0 2025-10-07 108.2 2025-10-08 105.1 2025-10-09 104.6 2025-10-10 102.9 Freq: D, dtype: float64print("收益率:") pct_change = prices.pct_change() print(pct_change) print("收益率最高的日期:", pct_change.idxmax()) print("收益率最低的日期:", pct_change.idxmin()) print("波动率:", pct_change.std()) 收益率: 2025-10-01 NaN 2025-10-02 -0.019962 2025-10-03 0.014549 2025-10-04 -0.016252 2025-10-05 -0.009718 2025-10-06 0.040236 2025-10-07 0.020755 2025-10-08 -0.028651 2025-10-09 -0.004757 2025-10-10 -0.016252 Freq: D, dtype: float64 收益率最高的日期: 2025-10-06 00:00:00 收益率最低的日期: 2025-10-08 00:00:00 波动率: 0.022586890620196715(4)销售数据分析某产品过去12个月的销售量Series,计算季度平均销量,销量最高的月份,月环比增长率,连续增长超过两个月的月份import numpy as np import pandas as pd sales = pd.Series([130, 135, 136, 131, 128, 130, 135, 137, 141, 135, 136, 133], index=pd.date_range('2024-02-01', periods=12, freq='ME')) print(sales) 2024-02-29 130 2024-03-31 135 2024-04-30 136 2024-05-31 131 2024-06-30 128 2024-07-31 130 2024-08-31 135 2024-09-30 137 2024-10-31 141 2024-11-30 135 2024-12-31 136 2025-01-31 133 Freq: ME, dtype: int64# resample() 重新采样 print("季度平均销量:") print(sales.resample("QE").mean()) 季度平均销量: 2024-03-31 132.500000 2024-06-30 131.666667 2024-09-30 134.000000 2024-12-31 137.333333 2025-03-31 133.000000 Freq: QE-DEC, dtype: float64print("销量最高的月份:", sales.idxmax()) 销量最高的月份: 2024-10-31 00:00:00print("月环比增长率:") sales_pct_change = sales.pct_change() print(sales_pct_change) 月环比增长率: 2024-02-29 NaN 2024-03-31 0.038462 2024-04-30 0.007407 2024-05-31 -0.036765 2024-06-30 -0.022901 2024-07-31 0.015625 2024-08-31 0.038462 2024-09-30 0.014815 2024-10-31 0.029197 2024-11-30 -0.042553 2024-12-31 0.007407 2025-01-31 -0.022059 Freq: ME, dtype: float64print("连续增长超过两个月的月份:") sales_up = sales_pct_change > 0 # rolling() 滑动窗口 rolling_up = sales_up.rolling(3).sum() == 3 print(sales_up[rolling_up].keys().tolist()) 连续增长超过两个月的月份: [Timestamp('2024-09-30 00:00:00'), Timestamp('2024-10-31 00:00:00')](5)每小时销售数据分析现有某商店每小时销售额Series,按天重采样计算每日的销售总额,计算每天营业时间(8:00 - 22:00)和非营业时间的销售额比例,找出销售额最高的三个小时import numpy as np import pandas as pd np.random.seed(1) hour_sales = pd.Series(np.random.randint(0, 100, 24), index=pd.date_range('2025-11-01', periods=24, freq='h')) print(hour_sales) 2025-11-01 00:00:00 37 2025-11-01 01:00:00 12 2025-11-01 02:00:00 72 2025-11-01 03:00:00 9 2025-11-01 04:00:00 75 2025-11-01 05:00:00 5 2025-11-01 06:00:00 79 2025-11-01 07:00:00 64 2025-11-01 08:00:00 16 2025-11-01 09:00:00 1 2025-11-01 10:00:00 76 2025-11-01 11:00:00 71 2025-11-01 12:00:00 6 2025-11-01 13:00:00 25 2025-11-01 14:00:00 50 2025-11-01 15:00:00 20 2025-11-01 16:00:00 18 2025-11-01 17:00:00 84 2025-11-01 18:00:00 11 2025-11-01 19:00:00 28 2025-11-01 20:00:00 29 2025-11-01 21:00:00 14 2025-11-01 22:00:00 50 2025-11-01 23:00:00 68 Freq: h, dtype: int32# 按天重采样 day_sales = hour_sales.resample('D').sum() print("当天销售总额:", day_sales) # print("当天销售总额:", hour_sales.sum()) 当天销售总额: 2025-11-01 920 Freq: D, dtype: int32# 营业时间的销售额 # business_hour_sales = hour_sales.between_time('8:00', '22:00') business_mask = (hour_sales.index.hour>=8) & (hour_sales.index.hour<=22) business_hour_sales = hour_sales[business_mask] business_sales = business_hour_sales.sum() # 非营业时间的销售额 # not_business_sales = day_sales - business_sales not_business_sales = hour_sales.drop(business_hour_sales.index).sum() print("营业时间与非营业时间销售额比例:") print(business_sales / not_business_sales) 营业时间与非营业时间销售额比例: 1.185273159144893print("销售额最高的三个小时:") #print(hour_sales.sort_values().tail(3)) print(hour_sales.nlargest(3)) 销售额最高的三个小时: 2025-11-01 17:00:00 84 2025-11-01 06:00:00 79 2025-11-01 10:00:00 76 dtype: int32
2025年11月23日
3 阅读
0 评论
0 点赞
2025-11-20
二、pandas - Series
1. 创建# 安装 pandas pip install pandasimport pandas as pd s = pd.Series([5, 1, 3, 2, 8, 10]) print(s) 0 5 1 1 2 3 3 2 4 8 5 10 dtype: int64# 自定义索引 s = pd.Series([5, 1, 3, 2, 8, 10], index=['A', 'B', 'C', 'D', 'E', 'F']) print(s) s = pd.Series([5, 1, 3, 2, 8, 10], index=[10, 20, 30, 40, 50, 60]) print(s) A 5 B 1 C 3 D 2 E 8 F 10 dtype: int64 10 5 20 1 30 3 40 2 50 8 60 10 dtype: int64# 自定义name(name用于描述这一列是干什么的) s = pd.Series([5, 1, 3, 2, 8, 10], index=[10, 20, 30, 40, 50, 60], name='成绩') print(s) 10 5 20 1 30 3 40 2 50 8 60 10 Name: 成绩, dtype: int64# 通过字典创建 s = pd.Series({'A': 10, 'B': 20, 'C': 30}) print(s) s1 = pd.Series(s, index=['A', 'C']) print(s1) A 10 B 20 C 30 dtype: int64 A 10 C 30 dtype: int642. 常用属性属性说明index索引(从0开始)values值dtype/dtypes元素的类型shape形状ndim维度size元素个数name名称loc[]显示索引,按标签索引或切片iloc[]隐式索引,按位置索引或切片at[]通过标签访问指定元素iat[]通过位置访问指定元素s = pd.Series([1, 2, 3, 4, 5], index=['A', 'B', 'C', 'D', 'E']) # index print(s.index) Index(['A', 'B', 'C', 'D', 'E'], dtype='object')# values print(s.values) [1 2 3 4 5]# shape ndim size print(s.shape, s.ndim, s.size) (5,) 1 5# name print(s.name) s.name = "测试" print(s.name) None 测试# loc[] 显示索引 print(s.loc['A']) # iloc[] 隐示索引 print(s.iloc[0]) # 同时也支持切片语法 print(s.loc['A':'C']) print(s.iloc[0:2]) 1 1 A 1 B 2 C 3 Name: 测试, dtype: int64 A 1 B 2 Name: 测试, dtype: int64# at 注:不支持切片语法 print(s.at['A']) # iat 注:不支持切片语法 print(s.iat[0]) 1 13. 访问数据的方式# 直接访问 # print(s[0]) 不建议这样使用,底层可能无法区分是取标签为0的值,还是取索引为0的值 print(s['A']) # 通过已设置的标签访问 1# 通过布尔索引访问 print(s[s<3]) A 1 B 2 Name: 测试, dtype: int64# head() 默认取前5行的数据 print(s.head()) s['F'] = 100 s['G'] = 200 print(s.head()) # tail() 默认取最后5行的数据 print(s.tail()) print("=======================") # 通过参数指定取几行的数据 print(s.head(2)) print("=======================") print(s.tail(3)) A 1 B 2 C 3 D 4 E 5 Name: 测试, dtype: int64 A 1 B 2 C 3 D 4 E 5 Name: 测试, dtype: int64 C 3 D 4 E 5 F 100 G 200 Name: 测试, dtype: int64 ======================= A 1 B 2 Name: 测试, dtype: int64 ======================= E 5 F 100 G 200 Name: 测试, dtype: int644. 常用方法方法说明head()查看前n行数据,默认值为5tail()查看后n行数据,默认值为5isin()判断集合中的每一个元素是否包含在指定的集合中isna()判断指定元素是否为缺失值(NaN/None)sum()求和(自动忽略缺失值)mean()平均值min()最小值max()最大值var()方差std()标准差median()中位数mode()众数(返回值可以有多个)quantile(q)分位数,q的取值范围:0 ~ 1describe()常见统计信息(如:count、mean、std、min、25%、50%、75%、max)value_count()每个唯一值出现的次数count()集合中非缺失值的数量nunique()唯一值个数(去重后的)unique()数组去重drop_duplicates()去除重复项,同理 unique()sample()随机抽样sort_index()按索引值排序sort_values()按值排序replace()替换keys()返回集合的索引s = pd.Series([5, 1, np.nan, 3, 2, None, 8]) s.name = 'datas' print(s) 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 5 NaN 6 8.0 Name: datas, dtype: float64# head() print(s.head()) 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 Name: datas, dtype: float64# tail() print(s.tail()) print("================") print(s.tail(1)) 2 NaN 3 3.0 4 2.0 5 NaN 6 8.0 Name: datas, dtype: float64 ================ 6 8.0 Name: datas, dtype: float64# 查看所有的描述信息 print(s.describe()) count 5.000000 mean 3.800000 std 2.774887 min 1.000000 25% 2.000000 50% 3.000000 75% 5.000000 max 8.000000 Name: datas, dtype: float64# 获取集合的元素个数(忽略缺失值) print(s.count()) 5# 获取集合的索引 print("通过方法获取:") print(s.keys()) print("通过属性获取:") print(s.index) 通过方法获取: RangeIndex(start=0, stop=7, step=1) 通过属性获取: RangeIndex(start=0, stop=7, step=1)# isna() 检查集合中的每一个元素是否为缺失值 print(s.isna()) 0 False 1 False 2 True 3 False 4 False 5 True 6 False Name: datas, dtype: bool# isin() print(s.isin([4, 5, 6])) 0 True 1 False 2 False 3 False 4 False 5 False 6 False Name: datas, dtype: bool# mean() print(s.mean()) # std() print(s.std()) # var() print(s.var()) # min() max() print(s.min()) print(s.max()) # median() print(s.median()) 3.8 2.7748873851023212 7.699999999999999 1.0 8.0 3.0""" |----|----|----|----| 1 2 3 5 8 去掉缺失值后等分4段(元素个数减一) quantile(0.25) 4 * 0.25 = 1 1在等分的第一段 分位数 = 1 + (2-1) * 1 = 2 """ print(s.sort_values()) print("===============") # quantile() print(s.quantile(0.25)) print(s.quantile(0.50)) print(s.quantile(0.75)) 1 1.0 4 2.0 3 3.0 0 5.0 6 8.0 2 NaN 5 NaN Name: datas, dtype: float64 =============== 2.0 3.0 5.0# mode() s[len(s)] = 1 print(s) print("===============") print(s.mode()) 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 5 NaN 6 8.0 7 1.0 Name: datas, dtype: float64 =============== 0 1.0 Name: datas, dtype: float64# 元素计数 print(s.value_counts()) datas 1.0 2 5.0 1 3.0 1 2.0 1 8.0 1 Name: count, dtype: int64# drop_duplicates() print(s) print("====================") print(s.drop_duplicates()) print("====================") s[len(s)] = 1 print(s.unique()) # 去重后的元素个数 print(s.nunique()) 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 5 NaN 6 8.0 7 1.0 Name: datas, dtype: float64 ==================== 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 6 8.0 Name: datas, dtype: float64 ==================== [ 5. 1. nan 3. 2. 8.] 5# sort_index() print(s.sort_index()) # sort_values() print(s.sort_values()) 0 5.0 1 1.0 2 NaN 3 3.0 4 2.0 5 NaN 6 8.0 7 1.0 8 1.0 Name: datas, dtype: float64 1 1.0 7 1.0 8 1.0 4 2.0 3 3.0 0 5.0 6 8.0 2 NaN 5 NaN Name: datas, dtype: float64
2025年11月20日
4 阅读
0 评论
0 点赞
2025-11-20
一、pandas
一、概要1. 简介pandas 是Python数据分析工具链中最核心的库,可用于数据读取、清洗、分析、统计、输出等,适用于处理结构化数据(如表格型数据)。2. 核心设计理念标签化数据结构:提供带标签的轴灵活处理缺失数据:内置NaN处理机制智能数据对齐:自动按标签对齐数据IO工具:支持CSV、Excel、SQL等多种数据源时间序列处理:原生支持日期时间处理和频率转换特性SeriesDataFrame维度一维二维索引单索引行索引 + 列名数据存储同质化数据类型各列的数据类型可以不同类比Excel 单列Excel Sheet创建方式pd.Series([1, 2, 3])pd.DataFrame({'col': [1, 2, 3]})
2025年11月20日
4 阅读
0 评论
0 点赞
2025-11-17
七、ndarray函数
1. 基本数学函数# 平方根 print(np.sqrt(4)) print(np.sqrt([1, 4, 9])) arr = np.array([1, 4, 9]) print(np.sqrt(arr)) 2.0 [1. 2. 3.] [1. 2. 3.]# 指数 e^x = y print(np.exp(3)) 20.085536923187668# 对数 ln y = x print(np.log(1)) 0.0# 三角函数 # 正弦 print(np.sin(1)) # 余弦 print(np.cos(np.pi)) 0.8414709848078965 -1.0# 绝对值 arr = np.array([1, 2, -3, 4, -5]) print(np.abs(arr)) [1 2 3 4 5]# a的b次幂 print(np.power(arr, 2)) [ 1 4 9 16 25]# 四舍五入 """ 奇进偶不进 奇进:当5前的数字是奇数时,进位:2.35 ---> 2.4 偶不进:当5前的数字是偶数时,舍去:2.45 ---> 2.4 """ print(np.round([1.1, 2.6, 3.5, 4.5, 4.51])) [1. 3. 4. 4. 5.]# 向上取整 arr = np.array([1.5, 2.6, 3.7]) print(np.ceil(arr)) # 向下取整 print(np.floor(arr)) [2. 3. 4.] [1. 2. 3.]# 检测缺失值 NaN arr = np.array([1, 2, np.nan, 3]) print(np.isnan(arr)) [False False True False]2. 统计函数arr = np.random.randint(1, 10, 5) print(arr) [3 8 7 7 9]# 求和 print(np.sum(arr)) 34# 平均值 print(np.mean(arr)) 6.8# 中位数 """ 元素个数为奇数时:先排序,再计算 元素个数为偶数时:中间两个数的平均值 """ print(np.median(arr)) print(np.median([1, 2, 3, 4])) 7.0 2.5# 标准差 """ [1, 2, 3] 的平均值为2 标准差 = ((1 - 2)^2 + (2 - 2)^2 + (3 - 2)^2) / 3 """ print(np.var([1, 2, 3])) # 方差 """ 根据标准差和方差可以评估一组数据的离散程度,如:温度是否恒定,机器运行是否稳定 """ print(np.std([1, 2, 3])) 0.6666666666666666 0.816496580927726# 最值 # 最大值 print("最大值:", np.max(arr), "索引位置:", np.argmax(arr)) # 最小值 print("最小值:", np.min(arr), "索引位置:", np.argmin(arr)) 最大值: 9 索引位置: 4 最小值: 3 索引位置: 0# 分位数 arr = np.array([1, 2, 3, 4]) """ 1 2 3 4 等分为4份,中间有3段 30%时: 0.3 * 3 = 0.9 (3 - 2) * 0.9 = 0.9 + 1 = 1.9 50%时: 0.5 * 3 = 1.5 (3 - 2) * 1.5 = 1.5 + 1 = 2.5 70%时: 0.7 * 3 = 2.1 (3 - 2) * 0.1 = 0.1 + 3 = 3.1 """ print(np.percentile(arr, 30)) print(np.percentile(arr, 50)) print(np.percentile(arr, 70)) 1.9 2.5 3.0999999999999996# 累积和 print(np.cumsum(arr)) # 累积积 print(np.cumprod(arr)) [ 1 3 6 10] [ 1 2 6 24]3. 比较函数arr = np.random.randint(1, 20, 5) print(arr) [19 2 15 11 4]# 大于 print(np.greater(arr, 4)) # 小于 print(np.less(arr, 4)) # 等于 print(np.equal(arr, 4)) # 矩阵间比较时需注意矩阵的形状要相同 print(np.equal(np.array([1, 2, 3]), np.array([2, 3, 4]))) [ True False True True False] [False True False False False] [False False False False True] [False False False]# 与 print(np.logical_and([1, 0], [1, 1])) # 或 print(np.logical_or([1, 0], [1, 1])) # 非 print(np.logical_not([1, 0])) [ True False] [ True True] [False True]# 检查至少有一个元素为 True print(np.any([1, 0, 0, 0, 1])) # 检查所有元素是否为 True print(np.all([1, 0, 0, 0, 1])) True False# 自定义条件 # 参数:判断条件,符合条件的,不符合条件的 print(np.where(arr > 5, arr, 0)) print(np.where(arr > 5, True, False)) [19 0 15 11 0] [ True False True True False]# np.select(条件, 要返回的结果, 默认值) print(np.select([arr > 5, arr < 6], ["大于5", "小于5"], default='未知')) ['大于5' '小于5' '大于5' '大于5' '小于5']4. 排序函数arr = np.random.randint(1, 30, 10) print(arr) [11 29 21 28 5 9 23 17 20 21]# 改变原数组 # arr.sort() # print(arr) # 不改变原数组 print("排序后的数组:", np.sort(arr)) print("原数组:", arr) 排序后的数组: [ 5 9 11 17 20 21 21 23 28 29] 原数组: [11 29 21 28 5 9 23 17 20 21]# 去重(注:去重的同时也做了排序) print(np.unique(arr)) [ 5 9 11 17 20 21 23 28 29]# 数组拼接 arr1 = np.array([1, 2, 3]) arr2 = np.array([3, 4, 5]) print(np.concat((arr1, arr2))) [1 2 3 3 4 5]# 数组的分割(注:切割的份数必须能让原数组等分) print(np.split(arr, 2)) [array([11, 29, 21, 28, 5], dtype=int32), array([ 9, 23, 17, 20, 21], dtype=int32)]# 调整数组的形状 # 注:reshape的形状需满足能让原数组等分 print(np.reshape(arr, [5, 2])) [[11 29] [21 28] [ 5 9] [23 17] [20 21]]
2025年11月17日
5 阅读
0 评论
0 点赞
2025-11-16
六、ndarray数学运算
# 算术运算 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print(a + b) print(a - b) print(a * b) print(a / b) print(a ** 2) [5 7 9] [-3 -3 -3] [ 4 10 18] [0.25 0.4 0.5 ] [1 4 9]# python 普通数组的拼接 c = [1, 2, 3] d = [4, 5, 6] print(c + d) [1, 2, 3, 4, 5, 6]a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[4, 5, 6], [7, 8, 9]]) print(a + b) print(a - b) print(a * b) print(a / b) print(a ** 2) [[ 5 7 9] [11 13 15]] [[-3 -3 -3] [-3 -3 -3]] [[ 4 10 18] [28 40 54]] [[0.25 0.4 0.5 ] [0.57142857 0.625 0.66666667]] [[ 1 4 9] [16 25 36]]# 数组与标量的算术运算 a = np.array([[1, 2, 3], [4, 5, 6]]) print(a + 3) print(a * 3) [[4 5 6] [7 8 9]] [[ 3 6 9] [12 15 18]]# 广播机制:1. 获取形状,2. 判断是否可广播(行列要相对应) a = np.array([1, 2, 3]) # 1行3列 b = np.array([[4], [5], [6]]) # 3行1列 """ a 1 2 3 1 2 3 1 2 3 b 4 4 4 5 5 5 6 6 6 """ print(a + b) [[5 6 7] [6 7 8] [7 8 9]]# 矩阵运算 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) b = np.array([[4, 5, 6], [7, 8, 9], [10, 11, 12]]) print(a + b) """ 矩阵乘法 (1, 1) = a(1, 1) * b(1, 1) + a(1, 2) * b (2, 1) + a(1, 3) * b(3, 1) """ print(a @ b) [[ 5 7 9] [11 13 15] [17 19 21]] [[ 48 54 60] [111 126 141] [174 198 222]]
2025年11月16日
6 阅读
0 评论
0 点赞
2025-11-14
五、ndarray索引与切片
索引/切片类型描述/用法基本索引通过下标索引直接访问元素(索引从0开始)行/列切片使用冒号进行切片,得到行或列的子集连续切片从起始索引到结束索引按步长切片sliceslice(start, stop, step)布尔索引通过布尔条件筛选满足条件的元素,支持逻辑运算符(&、|)1. 一维数组的索引与切片arr = np.random.randint(1, 50, 20) print(arr) [20 17 39 39 17 42 38 8 38 35 7 27 14 12 26 4 11 12 14 20]# 获取全部元素 print(arr[:]) [20 17 39 39 17 42 38 8 38 35 7 27 14 12 26 4 11 12 14 20]# 获取部分元素(左闭右开) print(arr[2:5]) [39 39 17]# 布尔索引(大于10的元素) print(arr[arr > 10]) [27 27 20 17 39 39 17 42 38 38 35 27 14 12 26 11 12]# 大于5小于10的元素 print(arr[(5 < arr) & (arr < 10)]) [8 7]# slice(start, stop, step) print(arr[slice(2, 20, 3)])2. 二维数组的索引与切片arr = np.random.randint(1, 50, (3, 5)) print(arr) [[14 20 31 47 33] [11 44 7 12 19] [ 4 14 18 44 17]]# 获取第一行第一列的元素 print(arr[0, 0]) # 获取第二行第三列的元素 print(arr[1, 2]) 14 7print(arr[:, :]) [[14 20 31 47 33] [11 44 7 12 19] [ 4 14 18 44 17]]# 获取第二行的元素 print(arr[1, :]) [11 44 7 12 19]# 获取第二行下标索引1到3的元素(左闭右开) print(arr[1, 1:3]) [44 7]# 布尔索引 print(arr[arr > 10]) # 该方法将符合条件的元素整理为了一维数组 [14 20 31 47 33 11 44 12 19 14 18 44 17]# 获取第二行中大于10的元素 print(arr[1][arr[1] > 10]) [11 44 12 19]# 筛选第二列的数据 print(arr[:, 1]) [20 44 14]
2025年11月14日
8 阅读
0 评论
0 点赞
2025-11-13
四、ndarray的数据类型
数据类型说明bool布尔值int8、uint8int16、uint16int32、uint32int64、uint64有符号/无符号的8位(1字节)整型有符号/无符号的16位(2字节)整型有符号/无符号的32位(4字节)整型有符号/无符号的64位(8字节)整型float16float32float64半精度浮点型单精度浮点型双精度浮点型complex64complex128用两个32位浮点数表示的复数用两个64位浮点数表示的复数# 布尔值 arr = np.array([1, 0], dtype=bool) print(arr) [ True False]# 整型 arr = np.array([1, 2, 3], dtype=int) print(arr) [1 2 3]
2025年11月13日
9 阅读
0 评论
0 点赞
2025-11-13
三、ndarray的创建
1. 基础构造适用于小规模数组或复制已有数据# 基础创建 arr = np.array([1, 2, 3]) print(arr) [1 2 3]# copy(深拷贝) arr_copy = arr.copy() print(arr_copy) arr_copy[0] = 0 print(arr_copy) print(arr) [1 2 3] [0 2 3] [1 2 3]2. 预定义形状填充用于快速初始化固定形状的数组(如全0占位,全1初始化)# 预定义形状 # 全 0 arr = np.zeros((2, 3)) # 元素类型默认为 float64 print(arr) # 创建时指定元素类型 arr = np.zeros((2, 3), dtype=int) print(arr) [[0. 0. 0.] [0. 0. 0.]] [[0 0 0] [0 0 0]]# 全 1 arr = np.ones((2, 3)) # 元素类型默认为 float64 print(arr) [[1. 1. 1.] [1. 1. 1.]]# 未初始化(每次初始化的结果不一致) arr = np.empty((2, 3)) print(arr) [[1. 1. 1.] [1. 1. 1.]]# 指定初始化值全填充 arr =np.full((2, 3), 1) print(arr) [[1 1 1] [1 1 1]]# _like 表示 shape、dtype和指定的数组一样 arr_like = np.zeros_like(arr) print(arr_like) [[0 0 0] [0 0 0]]3. 基于数值范围生成生成数值序列,常用于模拟时间序列、坐标网格等# 等差数列 # 参数:起始位置,结束位置,步长 arr = np.arange(0, 5, 1) print(arr) [0 1 2 3 4]# 等间隔数列 # 参数:起始位置,结束位置,要取几份(均分几份) arr = np.linspace(1, 5, 3) print(arr) # 知道长度和要取几份,通过arange也能实现 arr = np.arange(1, 100, 25) print(arr) arr = np.arange(1, 101, 25) print(arr) [1. 3. 5.] [ 1 26 51 76] [ 1 26 51 76]# 对数间隔数列 # 参数:起始位置,结束位置,要取几份(均分几份),指数 arr = np.logspace(0, 4, 3, base=2) print(arr) [ 1. 4. 16.]4. 矩阵名称维度示例备注标量0维1, 2单个数字,无行列向量1维[1, 2, 3]只有行或列矩阵2维[[1, 2, 3], [4, 5, 6]]严格的行列结构张量>= 3维[[[1, 2], [3, 4]]]高阶数组(如RGB图像)矩阵是由 行(row) 和 列(column) 排列成的矩形数组形状(shape):2行3列,记作 2x3 矩阵元素(entry):矩阵中的每个数字称作元素特殊矩阵# 单位矩阵 arr = np.eye(3, 5, dtype=int) print(arr) [[1 0 0 0 0] [0 1 0 0 0] [0 0 1 0 0]]# 对角矩阵 arr = np.diag([-1, 1, 2, 3]) print(arr) [[-1 0 0 0] [ 0 1 0 0] [ 0 0 2 0] [ 0 0 0 3]]5. 随机数组生成模拟实验数据、初始化神经网络权重等# 随机数组 # 0 - 1 之间的 arr = np.random.rand(3, 3) print(arr) [[0.49269745 0.28805571 0.0111438 ] [0.43128953 0.72709 0.5444694 ] [0.93261996 0.32217166 0.72474585]]# 指定范围区间 # 随机浮点数 arr = np.random.uniform(1, 3, (3, 3)) print(arr) [[2.70492755 1.636252 1.18072158] [1.38557557 2.13813528 2.11942667] [2.18956104 2.72948314 1.8949814 ]]# 随机整数 arr = np.random.randint(1, 10, (3, 3)) print(arr) [[4 9 9] [8 5 4] [2 6 5]]# 随机数列(正态分布 -3 ~ 3之间) # 两边的概率小,中间的概率大 arr = np.random.randn(3, 3) print(arr) [[ 0.89822946 1.21094463 -1.23360184] [ 0.26999662 0.97035489 -1.95975342] [-0.54847444 0.24917721 0.13710756]]# 设置随机种子 # 作用:a、b两个同事在各自电脑上做测试时,需要一个相同的数组,通过种子来做关联 np.random.seed(20) arr = np.random.randint(1, 10, (3, 3)) print(arr) [[4 5 7] [8 3 1] [7 9 6]]6. 高级构造方法处理非结构化数据(文件、字符串等)或通过函数生成复杂数组
2025年11月13日
5 阅读
0 评论
0 点赞
1
2
...
5