京公网安备 11010802034615号
经营许可证编号:京B2-20210330
Numpy基础数据结构
import numpy as np
ar = np.array([[1,2,3], [3,4,6], [4,5,7]]) # 二维数组 print(ar) print(type(ar)) ar
[[1 2 3] [3 4 6] [4 5 7]]numpy.ndarray'=""> array([[1, 2, 3], [3, 4, 6], [4, 5, 7]])
ar = np.array([[1,2,3], [3,4,6], [4,5,7]]) print(ar.ndim) # 输出数组维度个数(描述这个数组是几维的) print(ar.shape) # 输出数组维度形状 print(ar.size) # 数组元素的总个数 print(ar.dtype) # 数组的元素类型
2 (3, 3) 9 int32
创建数组
# 方式1 列表创建 ar1 = np.array([0,1,2,3,4,5,6,7,8,9]) print(ar1)
[0 1 2 3 4 5 6 7 8 9]
# 方式2 生成器创建 ar2 = np.array(range(10)) print(ar2)
[0 1 2 3 4 5 6 7 8 9]
# 方式3 arange类似range
ar3 = np.arange(10) # 返回0-9 整型
print(ar3)
print("")
ar3 = np.arange(10.0) # 返回0.0-9.0 浮点型
print(ar3)
print("")
ar3 = np.arange(5, 11) # 返回5-11之间的整型 不包括11
print(ar3)
print("")
ar3 = np.arange(5,11,2) # 2代表步长
print(ar3)
[0 1 2 3 4 5 6 7 8 9] [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [ 5 6 7 8 9 10] [5 7 9]
# 方式4 随机创建 范围是 0-1 ar4 = np.random.rand(10) # 随机生成数值范围是 0-1 并且有10个元素的一维数组 print(ar4) print(ar4.ndim) # 维度个数(告诉你这个数组是几维的)
[0.20490144 0.89930216 0.57403933 0.8923752 0.71947406 0.91049224 0.55663805 0.84965526 0.19433663 0.39087672] 1
# 方式5 均匀间隔创建
# linspace() 返回有num个元素的数组 这num个元素是在10-20上(默认包含结尾)有均匀间隔的元素
ar6 = np.linspace(10, 20, num=20) # 10 11 12 13 14 15 16 17 18 19 20
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=21) # 如果想按0.5来均等分的话num就要有21个 可以通过数个数来验证一下
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=21, endpoint=False) # endpoint=False 表示不包括结尾
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=20, endpoint=False)
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=20, endpoint=False, retstep=True) # 返回的一个元组并显示步长 retstep=True显示步长
print(ar6)
print("")
print(type(ar6))
print("")
print(ar6[0]) # 取出数组
print(ar6[1]) # 取出数组的步长
[10. 10.52631579 11.05263158 11.57894737 12.10526316 12.63157895 13.15789474 13.68421053 14.21052632 14.73684211 15.26315789 15.78947368 16.31578947 16.84210526 17.36842105 17.89473684 18.42105263 18.94736842 19.47368421 20. ] [10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5 20. ] [10. 10.47619048 10.95238095 11.42857143 11.9047619 12.38095238 12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524 15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381 18.57142857 19.04761905 19.52380952] [10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5] (array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5]), 0.5)[10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5] 0.5
# 创建元素全为0的数组
# zeros(shape, dtype=float, order='C') 默认为浮点型
ar7 = np.zeros(10)
print(ar7)
print(ar7.ndim)
print("")
ar7 = np.zeros((2,5))
print(ar7)
print(ar7.ndim)
print("")
ar7 = np.zeros((2,5), dtype=int)
print(ar7)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 1 [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] 2 [[0 0 0 0 0] [0 0 0 0 0]]
# zeros_likes表示仿造arr创建一个全为0的数组 ar8 = np.array(range(10)) print(ar8)
[0 1 2 3 4 5 6 7 8 9]
# zeros_likes表示仿造ar8创建一个全为0的数组
ar8 = np.array([list(range(10)), list(range(10,20))])
print(ar8)
print("")
arr = np.zeros_like(ar8)
print(ar8)
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]
# 创建数值全为1的数组
ar9 = np.ones(10)
print(ar9)
print("")
ar9 = np.ones((2,5))
print(ar9)
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [[1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.]]
# ones_like表示仿造ar9创建一个数值全为1的数组
ar9 = np.array([list(range(10)), list(range(10,20))])
print(ar9)
print("")
ar9 = np.ones_like(arr)
print(ar9)
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1]]
# 创建单位矩阵
ar10 = np.eye(10)
print(ar10)
print("")
print(ar10.ndim)
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]] 2
Numpy通用函数
import numpy as np
# reshape 改变数组维度形状
ar1 = np.arange(10)
print(ar1)
print("")
print(ar1.reshape(5, 2)) # 方式1
print("")
ar1 = np.ones((2, 5))
print(ar1)
print("")
ar1 = np.ones((2, 5)).reshape(5, 2) # 方式2
print(ar1)
print("")
ar1 = np.reshape(np.arange(9), (3,3)) # 方式3
print(ar1)
[0 1 2 3 4 5 6 7 8 9] [[0 1] [2 3] [4 5] [6 7] [8 9]] [[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.] [ 1. 1.] [ 1. 1.]] [[0 1 2] [3 4 5] [6 7 8]]
# T 数组转置
ar2 = np.zeros((2, 5))
print(ar2)
print("")
print(ar2.T)
[[ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.]] [[ 0. 0.] [ 0. 0.] [ 0. 0.] [ 0. 0.] [ 0. 0.]]
# resize跟reshape类似 区别是当改变数组维度时不会因数据量的不同而报错
ar3 = np.reshape(np.arange(15), (3, 5))
print(ar3)
print("")
ar4 = np.resize(ar3, (5, 3))
print(ar4)
print("")
ar5 = np.resize(ar3, (3, 4)) # 当改变后的数组需要的数据量比原数组的数据量少时 会依次排序 多余的数值不会显示
print(ar5)
print("")
ar6 = np.resize(ar3, (4, 5)) # 当改变后的数组需要的数据量比原数组的数据量多时 不足的会补充排序
print(ar6)
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11] [12 13 14]] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [ 0 1 2 3 4]]
# np.resize(a, shape) 有返回值 不会改变原数组
ar7 = np.arange(10)
print(ar7)
print("")
ar8 = np.resize(ar7, (2, 5))
print(ar8)
print("")
print(ar7)
[0 1 2 3 4 5 6 7 8 9] [[0 1 2 3 4] [5 6 7 8 9]] [0 1 2 3 4 5 6 7 8 9]
# a.resize(shape) 没有返回值 直接改变原数组
ar7 = np.arange(10)
print(ar7)
print("")
ar8 = ar7.resize(2, 5) # 注意ar8为None 因为是改变原数组 所以没有返回值
print(ar8)
print("")
print(ar7)
[0 1 2 3 4 5 6 7 8 9] None [[0 1 2 3 4] [5 6 7 8 9]]
# 数据类型转换 astype
ar9 = np.arange(10, dtype=np.float64)
print(ar9)
print(ar9.dtype) # 查看数值类型
print("")
ar10 = ar9.astype(np.int64) # 改变数值类型
print(ar10)
print(ar10.dtype)
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64 [0 1 2 3 4 5 6 7 8 9] int64
# 数组堆叠
# hstack vstack
a = np.arange(10)
print(a)
print("")
b= np.arange(10, 20)
print(b)
print("")
c = np.hstack((a, b)) # hstack表示横向连接
print(c)
print("")
d = np.vstack((a, b)) # vstack表示纵向连接
print(d)
print("")
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]
# stack
print(a)
print("")
print(b)
print("")
e = np.stack((a, b), axis=0) # axis=0 横向看(纵向连接)
print(e)
print("")
e = np.stack((a, b), axis=1) # 纵向看(横向连接)
print(e)
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 10] [ 1 11] [ 2 12] [ 3 13] [ 4 14] [ 5 15] [ 6 16] [ 7 17] [ 8 18] [ 9 19]]
# 数组拆分
a = np.arange(16).reshape(4, 4)
print(a)
print("")
b = np.hsplit(a, 2) # 按列来切割
print(b)
print("")
c = np.vsplit(a, 2) # 按行来切割
print(c)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13]]), array([[ 2, 3], [ 6, 7], [10, 11], [14, 15]])] [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11], [12, 13, 14, 15]])]
# 求和 sum
a = np.arange(10).reshape(2, 5)
print(a)
print("")
print(np.sum(a, axis=0)) # 0代表横轴
print("")
print(np.sum(a, axis=1)) # 1代表纵轴
[[0 1 2 3 4] [5 6 7 8 9]] [ 5 7 9 11 13] [10 35]
# 排序 sort print(np.sort(np.array([3, 5, 5, 3, 1, 4])))
[1 3 3 4 5 5]
Numpy基本索引和切片
import numpy as np
# 一维数组
arr = np.array(range(10))
print(arr)
print("")
print(arr[4])
print(arr[:3])
print(arr[::2])
[0 1 2 3 4 5 6 7 8 9] 4 [0 1 2] [0 2 4 6 8]
# 二维数组
arr = np.arange(20).reshape(4, 5)
print(arr)
print("")
print(arr[2]) # 取出某一行
print("")
print(arr[2][2]) # 取出某一个数
print("")
print(arr[1:3]) # 取出多行
print("")
print(arr[2, 2]) # 逗号前代表行 逗号后代表列
print("")
print(arr[:2, 1:3]) # 取出多行多列
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [10 11 12 13 14] 12 [[ 5 6 7 8 9] [10 11 12 13 14]] 12 [[1 2] [6 7]]
# 三维数组
arr = np.arange(48).reshape(3,4,4) # 3个4行4列的数组
print(arr)
print("*"*30)
print(arr[2])
print("*"*30)
print(arr[2][1])
print("*"*30)
print(arr[2][1][1])
[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]] [[32 33 34 35] [36 37 38 39] [40 41 42 43] [44 45 46 47]]] ****************************** [[32 33 34 35] [36 37 38 39] [40 41 42 43] [44 45 46 47]] ****************************** [36 37 38 39] ****************************** 37
Numpy布尔型索引及切片
# 用布尔型索引去做筛选
arr = np.arange(12).reshape(3, 4)
print(arr)
print("")
a = np.array([True, False, True])
print(a)
print("")
b = np.array([True, False, False, True])
print(b)
print("")
print(arr[a, :])
print("")
print(arr[:, b])
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [ True False True] [ True False False True] [[ 0 1 2 3] [ 8 9 10 11]] [[ 0 3] [ 4 7] [ 8 11]]
# 用布尔型矩阵去做筛选
print(arr)
print("")
m = arr>5
print(m)
print("")
n = arr[arr>5]
print(n)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[False False False False] [False False True True] [ True True True True]] [ 6 7 8 9 10 11]
Numpy随机数生成
import numpy as np
# random.normal 正态分布随机数 print(np.random.normal(size=(4, 4))) # 生成一个4行4列的正态分布随机数
[[ 1.01645652 -0.30952914 -0.40576099 -0.94259139] [-0.16483869 0.42278586 0.8260384 -0.88469832] [ 1.31487466 -0.86188981 -0.71485117 -2.12449215] [-1.80353888 -0.93264659 -1.1424078 0.31905742]]
# random.rand 平均分布 随机生成 [0-1) 之间的数
a = np.random.rand() # 生成一个数
print(a)
print("")
b = np.random.rand(4) # 生成4个数
print(b)
print("")
c = np.random.rand(2,4) # 生成二维数组
print(c)
0.11426452609434679 [ 0.79633633 0.32467913 0.28038512 0.56304155] [[ 0.06561635 0.40454132 0.58158716 0.73527881] [ 0.59301023 0.74935326 0.24347665 0.59653582]]
# np.random.randint 在自定义的范围内随机生成整数
a = np.random.randint(3) # 在 [0-3)的范围内随机生成一个整数
print(a)
print("")
b = np.random.randint(2, 10) # [2-10)的范围内随机生成一个整数
print(b)
print("")
c = np.random.randint(20, size=10) # 生成一个 [0-20) 之间 有10个整数元素的一维数组
print(c)
print("")
d = np.random.randint(20, 40, size=10) # 生成一个 [20-40) 之间 有10个整数元素的一维数组
print(d)
print("")
e = np.random.randint(40, 50, size=(2, 5)) # 生成一个 [40-50) 之间 有2行5列元素的二维数组
print(e)
0 6 [ 9 11 5 12 19 4 19 1 7 10] [24 20 34 38 37 24 26 35 35 30] [[49 42 42 44 49] [44 44 40 49 45]]
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据可视化领域,单一图表往往难以承载多维度信息 —— 力导向图擅长展现节点间的关联结构与空间分布,却无法直观呈现 “流量 ...
2025-10-27这个问题问到了 Tableau 中两个核心行级函数的经典组合,理解它能帮你快速实现 “相对位置占比” 的分析需求。“index ()/size ( ...
2025-10-27对 CDA(Certified Data Analyst)数据分析师而言,“假设检验” 绝非 “套用统计公式的机械操作”,而是 “将模糊的业务猜想转 ...
2025-10-27在数字化运营中,“凭感觉做决策” 早已成为过去式 —— 运营指标作为业务增长的 “晴雨表” 与 “导航仪”,直接决定了运营动作 ...
2025-10-24在卷积神经网络(CNN)的训练中,“卷积层(Conv)后是否添加归一化(如 BN、LN)和激活函数(如 ReLU、GELU)” 是每个开发者都 ...
2025-10-24在数据决策链条中,“统计分析” 是挖掘数据规律的核心,“可视化” 是呈现规律的桥梁 ——CDA(Certified Data Analyst)数据分 ...
2025-10-24在 “神经网络与卡尔曼滤波融合” 的理论基础上,Python 凭借其丰富的科学计算库(NumPy、FilterPy)、深度学习框架(PyTorch、T ...
2025-10-23在工业控制、自动驾驶、机器人导航、气象预测等领域,“状态估计” 是核心任务 —— 即从含噪声的观测数据中,精准推断系统的真 ...
2025-10-23在数据分析全流程中,“数据清洗” 恰似烹饪前的食材处理:若食材(数据)腐烂变质、混杂异物(脏数据),即便拥有精湛的烹饪技 ...
2025-10-23在人工智能领域,“大模型” 已成为近年来的热点标签:从参数超 1750 亿的 GPT-3,到万亿级参数的 PaLM,再到多模态大模型 GPT-4 ...
2025-10-22在 MySQL 数据库的日常运维与开发中,“更新数据是否会影响读数据” 是一个高频疑问。这个问题的答案并非简单的 “是” 或 “否 ...
2025-10-22在企业数据分析中,“数据孤岛” 是制约分析深度的核心瓶颈 —— 用户数据散落在注册系统、APP 日志、客服记录中,订单数据分散 ...
2025-10-22在神经网络设计中,“隐藏层个数” 是决定模型能力的关键参数 —— 太少会导致 “欠拟合”(模型无法捕捉复杂数据规律,如用单隐 ...
2025-10-21在特征工程流程中,“单变量筛选” 是承上启下的关键步骤 —— 它通过分析单个特征与目标变量的关联强度,剔除无意义、冗余的特 ...
2025-10-21在数据分析全流程中,“数据读取” 常被误解为 “简单的文件打开”—— 双击 Excel、执行基础 SQL 查询即可完成。但对 CDA(Cert ...
2025-10-21在实际业务数据分析中,我们遇到的大多数数据并非理想的正态分布 —— 电商平台的用户消费金额(少数用户单次消费上万元,多数集 ...
2025-10-20在数字化交互中,用户的每一次操作 —— 从电商平台的 “浏览商品→加入购物车→查看评价→放弃下单”,到内容 APP 的 “点击短 ...
2025-10-20在数据分析的全流程中,“数据采集” 是最基础也最关键的环节 —— 如同烹饪前需备好新鲜食材,若采集的数据不完整、不准确或不 ...
2025-10-20在数据成为新时代“石油”的今天,几乎每个职场人都在焦虑: “为什么别人能用数据驱动决策、升职加薪,而我面对Excel表格却无从 ...
2025-10-18数据清洗是 “数据价值挖掘的前置关卡”—— 其核心目标是 “去除噪声、修正错误、规范格式”,但前提是不破坏数据的真实业务含 ...
2025-10-17