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

numpy学习笔记

一、ndarray

1.ndarray的特性

多维性

import numpy as np
arr = np.array(5)  # 创建0维的ndarray数组
print(arr)
print('arr的维度:', arr.ndim)   # 数组的维度number of dimensions
5
arr的维度: 0
arr = np.array([1, 2, 3])  # 创建1维的ndarray数组
print(arr)
print('arr的维度:', arr.ndim)   # 数组的维度number of dimensions
[1 2 3]
arr的维度: 1
arr = np.array([ [1, 2, 3], [4, 5, 6]])  # 创建2维的ndarray数组
print(arr)
print('arr的维度:', arr.ndim)   # 数组的维度number of dimensions
[[1 2 3][4 5 6]]
arr的维度: 2

同质性

arr = np.array([1, 'hello'])  # 不同的数据类型会被强制转换成相同的数据类型
print(arr)
['1' 'hello']
arr = np.array([1, 2.5])  # 不同的数据类型会被强制转换成相同的数据类型
print(arr)
[1.  2.5]

2.ndarray的属性

arr = np.array(1)
print(arr)
print('数组的形状:', arr.shape)
print('数组的维度:', arr.ndim)
print('元素的个数:', arr.size)
print('元素的数据类型:', arr.dtype)
print('元素的转置', arr.T)
1
数组的形状: ()
数组的维度: 0
元素的个数: 1
元素的数据类型: int64
元素的转置 1
arr = np.array([1, 2.5, 3])
print(arr)
print('数组的形状:', arr.shape)
print('数组的维度:', arr.ndim)
print('元素的个数:', arr.size)
print('元素的数据类型:', arr.dtype)
print('元素的转置', arr.T)
[1.  2.5 3. ]
数组的形状: (3,)
数组的维度: 1
元素的个数: 3
元素的数据类型: float64
元素的转置 [1.  2.5 3. ]
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print('数组的形状:', arr.shape)
print('数组的维度:', arr.ndim)
print('元素的个数:', arr.size)
print('元素的转置', arr.T)
[[1 2 3][4 5 6]]
数组的形状: (2, 3)
数组的维度: 2
元素的个数: 6
元素的转置 [[1 4][2 5][3 6]]

3.ndarray的创建

# 基础的创建方法
list1 = [4, 5, 6]
arr = np.array(list1,dtype=np.float64)
print(arr.ndim)  # 属性
print(arr)
1
[4. 5. 6.]
# copy
arr1 = np.copy(arr)  # 元素跟原始的数组相同,但是不是一个数组了
print(arr1)
arr1[0] = 8
print(arr1)
print(arr)
[4. 5. 6.]
[8. 5. 6.]
[4. 5. 6.]
# 预定义形状
# 全0  全1  未初始化  固定值
# 全0
arr = np.zeros((2,3),dtype=int)
print(arr)
print(arr.dtype)
[[0 0 0][0 0 0]]
int64
arr = np.zeros((200,),dtype=int)
print(arr)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
# 全1
arr = np.ones((5,8),dtype=int)
print(arr)
[[1 1 1 1 1 1 1 1][1 1 1 1 1 1 1 1][1 1 1 1 1 1 1 1][1 1 1 1 1 1 1 1][1 1 1 1 1 1 1 1]]
# 未初始化
# empty 不会初始化数组里的值,只是在内存里直接分配一块空间
arr = np.empty((2,3))
print(arr)
[[-0.59697917  0.30601791  0.7768145 ][-0.466596   -0.43245674 -2.02942807]]
arr = np.empty((4, 2))
print(arr)
[[4.67296746e-307 1.69121096e-306][4.67293691e-307 1.42413555e-306][1.78019082e-306 1.37959740e-306][6.23057349e-307 1.42419530e-306]]
arr = np.full((3,4),2025)
print(arr)
[[2025 2025 2025 2025][2025 2025 2025 2025][2025 2025 2025 2025]]
arr1 = np.zeros_like(arr)
print(arr1)
arr1 = np.empty_like(arr)
print(arr1)
arr1 = np.ones_like(arr)
print(arr1)
arr1 = np.full_like(arr,2026)
print(arr1)
[[0 0 0 0][0 0 0 0][0 0 0 0]]
[[      2396494551320                  50                   00][  31525476564467712 3543889139687646571 32713573663288333787077182708142924082][7002360972756725044 3618980067091362352 83861120191890977784123107242771247989]]
[[1 1 1 1][1 1 1 1][1 1 1 1]]
[[2026 2026 2026 2026][2026 2026 2026 2026][2026 2026 2026 2026]]
# 等差数列 2 4 6 8 10
arr = np.arange(1, 51, 1) # start,end,step(步长)
print(arr)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2425 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 4849 50]
# 等间隔数列
arr = np.linspace(0,100,5)
print(arr)
[  0.  25.  50.  75. 100.]
# 含义:在 [start, stop] 区间内,等间距生成 num 个数(包含 stop)。
# 这里:start=0, stop=100, num=5 → 把 [0,100] 分成 4 段
arr = np.linspace(0,100,5,dtype=int)
print(arr)
# start=0, stop=101, step=25 → 从 0 开始,每次加 25,直到 ≥101 停止
arr = np.arange(0,101, 25)
print(arr)
[  0  25  50  75 100]
[  0  25  50  75 100]
# 对数间隔数列
# np.logspace(start, stop, num, base=10)
# 在对数刻度下,生成 num 个数。
# 生成的是:base ** start 到 base ** stop 之间的等比数列
arr = np.logspace(0,4,3,base=2)
print(arr)
[ 1.  4. 16.]
# np.linspace(start, stop, num)
# 在 [start, stop] 闭区间里,等间距取 num 个点。
arr = np.linspace(0,4,3)
print(arr)
[0. 2. 4.]
arr = np.logspace(0,4,3)
print(arr)
[1.e+00 1.e+02 1.e+04]
# 特殊矩阵
# 单位矩阵:主对角线上的数字为1,其他的数字为0
arr = np.eye(3,4,dtype=int)
print(arr)
[[1 0 0 0][0 1 0 0][0 0 1 0]]
# 对角矩阵:主对角线上非零的0,其他的数字为0
# arr = np.diag([5,1,2,3])
arr=np.diag([1,2,3,4])
print(arr)
[[1 0 0 0][0 2 0 0][0 0 3 0][0 0 0 4]]
# 随机数组的生成
# 生成0到1之间的随机浮点数(均匀分布)
arr = np.random.rand(2,3)
print(arr)
[[0.85199297 0.06536195 0.83019394][0.07373522 0.91461023 0.4366306 ]]
# 生成指定范围区间的随机浮点数
arr = np.random.uniform(3, 6,(2,3))
print(arr)
[[5.6837298  4.28723629 3.49872665][4.06417994 4.27914786 4.01241922]]
# 生成指定范围区间的随机整数
arr = np.random.randint(3, 30,(2,3))
print(arr)
[[ 8 13 14][18 25  7]]
# 生成随机数列(正态分布)(-3到3之间)
# 两边小,中间大
# 值大多数集中在 0 附近(中间大);
# 离 0 越远的数出现概率越小(两边小)。
# 理论上值域是 (-∞, +∞),不是严格限制在 [-3, 3]。
arr = np.random.randn(2,3)
print(arr)
[[ 0.93946935 -0.97848104  0.50309684][ 0.40641447  0.32346101 -0.49341088]]
# 设置随机种子
# 设置随机数种子为 20,当然其实可以是任意数
# 这样每次运行代码都会得到相同的随机结果
np.random.seed(20)
# 这里是 1 ≤ 随机数 < 10,即从 1 到 9。
# size=(2,5) 表示生成一个 2 行 5 列 的数组。
arr = np.random.randint(1,10,(2,5))
print(arr)
[[4 5 7 8 3][1 7 9 6 4]]
# dtype='i8':指定数组的数据类型。
# i 代表 整数 (signed integer)。
# 8 表示 8 字节(64 位)。
# 所以 i8 就是 int64。
arr = np.array([1,2,3],dtype='i8')
print(arr)
[1 2 3]
  1. ndarray的数据类型

布尔类型 bool

整数类型 int uint

浮点数 float

复数 complex

arr = np.array([1,0,127,0],dtype= np.int8)
print(arr)
[  1   0 127   0]
  1. 索引与切片
# 一维数组的索引与切片
arr = np.random.randint(1,100,20)
print(arr)
[17 63 17  8 99  7 27 14 76 59 26  4 75 76 62 78 84 58 95 33]
print(arr[10])
print(arr[:]) # 获取全部的数据
print(arr[2:5])  # start:end+1 左包右不包
print(arr[slice(2,15,3)])  #start,end,step
print(arr[ (arr>10)  & (arr<70) ]) # 布尔索引
26
[17 63 17  8 99  7 27 14 76 59 26  4 75 76 62 78 84 58 95 33]
[17  8 99]
[17  7 76  4 62]
[17 63 17 27 14 59 26 62 58 33]
# 二维数组的索引与切片
arr = np.random.randint(1,100,(4,8))
print(arr)
[[11  7 76 19  4 78 18 44][17 19 80 91 60 72 76 30][46  7 64 79 25 19 94 34][79 43 95  4 19 71 53 23]]
print(arr[1,3])  # 索引
print(arr[ 1,2:5])
print(arr[2][  arr[2] > 50 ])
print( arr[:,3] )
91
[80 91 60]
[64 79 94]
[19 91 79  4]
  1. 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]
c = [1, 2, 3]
d = [4, 5, 6]
for i in range(len(c)):d[i] = d[i]+c[i]
print(d)
[5, 7, 9]
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[1,2,3]])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** 2)
[[ 5  7  9][11 13 15][ 8 10 12]]
[[-3 -3 -3][-3 -3 -3][ 6  6  6]]
[[ 4 10 18][28 40 54][ 7 16 27]]
[[0.25       0.4        0.5       ][0.57142857 0.625      0.66666667][7.         4.         3.        ]]
[[ 1  4  9][16 25 36][49 64 81]]
# 数组与标量之间的算术运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a + 3)
print(a * 3)
[[ 4  5  6][ 7  8  9][10 11 12]]
[[ 3  6  9][12 15 18][21 24 27]]
# 广播机制: 1.获取形状 2.是否可广播
# 同一维度:相同、1
a = np.array([1,2,3]) #1*3
b = np.array([[4],[5],[6]])  #3*1
print(b - a )
'''a1 2 31 2 31 2 3b4 4 45 5 56 6 6
'''
[[3 2 1][4 3 2][5 4 3]]'a\n 1 2 3\n 1 2 3\n 1 2 3\n b\n 4 4 4\n 5 5 5\n 6 6 6\n'
a = np.array([1,2,3]) #1*3
b = np.array([4,5])  #1*2
print(b - a )
---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)Cell In[43], line 31 a = np.array([1,2,3]) #1*32 b = np.array([4,5])  #1*2
----> 3 print(b - a )ValueError: operands could not be broadcast together with shapes (2,) (3,) 
# 矩阵运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[1,2,3]])
print(a @ b)
[[ 21  27  33][ 57  72  87][ 93 117 141]]
'''a
1 2 3
4 5 6
7 8 9
b
4 5 6
7 8 91 2 3'''
'a\n1 2 3\n4 5 6\n7 8 9\nb\n4 5 6\n7 8 9\n\n1 2 3'

2.3 numpy中的常用函数

1. 基本数学函数

# 计算平方根
print(np.sqrt(9))
print(np.sqrt([1,4,9]))
arr = np.array([1,25,81])
print(np.sqrt(arr))
3.0
[1. 2. 3.]
[1. 5. 9.]
# 计算指数  e^x  = y
print(np.exp(1))
2.718281828459045
# 计算自然对数  ln y = x
print(np.log(2.71))
0.9969486348916096
# 计算正弦值、余弦值
print(np.sin(np.pi/2))
print(np.cos(np.pi))
1.0
-1.0
# 计算绝对值
arr = np.array([-1, 1, 2, -3])
print(np.abs(arr))
[1 1 2 3]
# 计算a的b次幂
print(np.power(arr,3))
[ -1   1   8 -27]
# 四舍五入
print(np.round([3.2, 4.5, 8.1, 9.6]))
[ 3.  4.  8. 10.]
# 向上取整,向下取整
arr = np.array([1.6, 25.1, 81.7])
print(np.ceil(arr))
print(np.floor(arr))
[ 2. 26. 82.]
[ 1. 25. 81.]
# 检测缺失值NaN
np.isnan([1, 2, np.nan, 3])
array([False, False,  True, False])

2.统计函数

求和、计算平均值、计算中位数、标准差、方差

查找最大值、最小值

计算分位数、累积和、累积差

arr = np.random.randint(1,200,8)
print(arr)
[143   5  28  76   9   7  27  83]
# 求和
print(np.sum([1,2,3]))
6
# 计算平均值
print(np.mean(arr))
47.25
# 计算中位数
# 奇数:排序后中间的数值
# 偶数:中间的两个数的平均值
print(np.median([4,1,2]))
print(np.median([1,1,1,1,1,1,1,1,1,100]))
2.0
1.0
# 计算标准差、方差
# 1,2,3 的平均值 2
# ((1-2)^2 + (2-2)^2 + (3-2)^2 )/ 3 = 0.666
arr1 = np.array([1,2,1,2,1,1,1,2])
arr2 = np.array([1,0,3,0,0,0,4,3])
print(np.mean(arr1))
print(np.mean(arr2))
print(np.var(arr1))
print(np.var(arr2))
1.375
1.375
0.234375
2.484375
# 计算最大值、最小值
print(arr)
print(np.max(arr), np.argmax(arr))
print(np.min(arr), np.argmin(arr))
[143   5  28  76   9   7  27  83]
143 0
5 1
# 分位数
# 中位数
# __________________
# 1     2    3     4
# 1       2        3
print(np.median([1,2,3]))
print(np.median([1,2,3,4]))
np.random.seed(0)
arr = np.random.randint(0,100,4)
print(arr)
# __________________
# 44   47   64   67
# (47+64)/2
print(np.median(arr))
print(np.percentile(arr,80))
# 0.25*3=0.75
# (47-44)*0.75=2.25 + 44 = 46.25
# 3*0.8 = 2.4
# (67-64)*0.4 = 1.2 + 64 = 65.2
2.0
2.5
[44 47 64 67]
55.5
65.2
# 累积和、累积积
arr = np.array([1,2,3])
print(np.sum(arr))
print(np.cumsum(arr))
print(np.cumprod(arr))
6
[1 3 6]
[1 2 6]
# 创建嵌套JSON结构的数据
import numpy as np
products = {"products": [{"id": f"P{i}","name": f"Product {i}","category": np.random.choice(["Electronics", "Clothing", "Home", "Food"]),"price": round(np.random.uniform(5, 200), 2),"in_stock": np.random.choice([True, False]),"specs": {"weight": round(np.random.uniform(0.1, 5), 2),"dimensions": {"length": np.random.randint(5, 50),"width": np.random.randint(5, 30),"height": np.random.randint(5, 20)}}} for i in range(1, 21)]
}# 保存为JSON
import json
with open('data/products.json', 'w') as f:json.dump(products, f, indent=2)
---------------------------------------------------------------------------FileNotFoundError                         Traceback (most recent call last)Cell In[66], line 2523 # 保存为JSON24 import json
---> 25 with open('data/products.json', 'w') as f:26     json.dump(products, f, indent=2)File D:\ProgramData\anaconda3\Lib\site-packages\IPython\core\interactiveshell.py:324, in _modified_open(file, *args, **kwargs)317 if file in {0, 1, 2}:318     raise ValueError(319         f"IPython won't let you open fd={file} by default "320         "as it is likely to crash IPython. If you know what you are doing, "321         "you can use builtins' open."322     )
--> 324 return io_open(file, *args, **kwargs)FileNotFoundError: [Errno 2] No such file or directory: 'data/products.json'





文章转载自:

http://hYYWRGY6.ctsjq.cn
http://2APQ3hCw.ctsjq.cn
http://j1UtOVP3.ctsjq.cn
http://sslzDcZA.ctsjq.cn
http://Jd4KU0dh.ctsjq.cn
http://zdBRciDG.ctsjq.cn
http://qgJBKPQ1.ctsjq.cn
http://V1LhnoFk.ctsjq.cn
http://eBk7jPgj.ctsjq.cn
http://xuR4CUJB.ctsjq.cn
http://ShMmijDF.ctsjq.cn
http://WbNtk0eJ.ctsjq.cn
http://wqF7JzuN.ctsjq.cn
http://diAFCowc.ctsjq.cn
http://iXr4lI3g.ctsjq.cn
http://HwhFJ84H.ctsjq.cn
http://sY1n7gIU.ctsjq.cn
http://4i1PeWBk.ctsjq.cn
http://yXq1NfOk.ctsjq.cn
http://b6Lh25JW.ctsjq.cn
http://CbNOrTuZ.ctsjq.cn
http://FfhRm4E2.ctsjq.cn
http://FkmJoQyH.ctsjq.cn
http://QkSAmzOI.ctsjq.cn
http://MFMVs06y.ctsjq.cn
http://2cpuiE3P.ctsjq.cn
http://quZOpFTa.ctsjq.cn
http://wmeXIU4H.ctsjq.cn
http://HsK6DTsw.ctsjq.cn
http://C1gn64OW.ctsjq.cn
http://www.dtcms.com/a/384663.html

相关文章:

  • Oracle体系结构-归档日志文件(Archive Log Files)
  • 唐源电气:机器视觉与AI Agent引领智能运维
  • 【Python】在pycharm中使用environment.ylm文件配置虚拟环境
  • 2025前端面试题及答案-2(详细)
  • 技术突破:《Light Sci. Appl.》SH-GSL理论,为超表面提供全通道谐波调控能力
  • 2025年ASOC SCI2区TOP,多类别教学优化算法+多修剪机器人与多施肥无人机协同任务分配,深度解析+性能实测
  • 佰力博检测与您探讨高低温介电测试的应用领域
  • 网络编程-day6
  • 【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
  • 《格式工厂FormatFactory》 [5.21.0][便携版] 下载
  • 【ubuntu24.04】安装rust
  • vue-sync修饰符解析以及切换iframe页面进行保存提示功能的思路
  • 005 Rust变量与常量
  • DOM---操作元素样式属性详解
  • Excel简单教程
  • Node.js 项目依赖包管理
  • LabVIEW命令行使用方法
  • 单变量单步时序预测 | TCN-LSTM时间卷积结合长短期记忆神经网络(MATLAB)
  • ESLint 自定义 Processor(处理器)
  • MySQL 极致性能优化指南——从 INSERT 到 UPDATE 的七大战场
  • Web前端开发工具有哪些?常用Web前端开发工具推荐、Web前端开发工具对比
  • 一款开源的im简介
  • Vite Plugin PWA – 零配置构建现代渐进式Web应用
  • 用爬虫技术获取淘宝商品评论——提升购物体验的利器
  • 【新手指南】async/await与Axios的用法
  • Java的并发编程1
  • 使用prometheus operator监控部署在k8s集群外的mysql实例
  • Notepad++ 8.7 64位安装教程(附安装包)​
  • 《大数据之路1》笔记3:数据管理
  • 【代码随想录day 27】 力扣 376. 摆动序列