数据处理与统计分析 —— numpy入门

目录

概述

属性

创建ndarray

[zeros() /ones()/empty()](#zeros() /ones()/empty())

arange ()

matrix ()

创建随机数矩阵

转换数据类型

等比/等差数列

Numpy内置函数

基本函数

统计函数

比较函数

去重函数

排序函数

概述

  • NumPy(Numerical Python)是Python数据分析必不可少的第三方库
  • 重要功能
      1. 高性能科学计算和数据分析的基础包
      1. ndarray,多维数组,具有矢量运算能力,快速、节省空间
      1. 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
      1. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具

属性

    • ndarray.ndim 数组的维度,几维数组返回的就是几

    • ndarray.shape 返回几行几列

    • ndarray.size 返回元素个数

    • ndarray.dtype 返回元素类型

    • ndarray.itemsize 返回每个元素的字节数

      python 复制代码
      # 创建一个二维数组
      import numpy as np
      arr = np.array([[1,2,3],[4,5,6]])
      print(f"ndarray对象:{arr}")
      print(f"ndarray对象维度:{arr.ndim}")
      print(f"ndarray对象元素个数:{arr.size}")
      print(f"ndarray对象元素类型:{arr.dtype}")

创建ndarray

  • 普通创建array()
    *

    python 复制代码
    import numpy as np
    arr = np.array([1.0,2.0,3.0,4.0,5.0])
    print(f"数组{arr}")

zeros() /ones()/empty()

  • 函数zeros()创建一个全是0的数组

    python 复制代码
    # zeros()函数创建全0数组
    import numpy as np
    arr = np.zeros((2,3))
    print(f"数组:\n{arr}")
  • 函数ones()创建一个全1的数组

    python 复制代码
    # ones()函数创建全1数组
    import numpy as np
    arr = np.ones((2,3))
    print(f"数组:\n{arr}")
    python 复制代码
    # ones()函数创建全1数组
    import numpy as np
    # 创建三维数组,2个数组,每个数组3行4列
    arr = np.ones((2,3,4)) 
    print(f"数组:\n{arr}")
    print(f"数组类型{type(arr)}")
    print(f"数组维度{arr.ndim}")
    print(f"数组元素个数{arr.size}")
    print(f"数组元素类型:{arr.dtype}")
    • 函数empty()创建一个内容随机并且依赖于内存状态的数组。

      • 默认创建的数组类型(dtype)都是float64
    python 复制代码
    # empty()函数创建数组,内容随机,依赖内存状态的随机值
    import numpy as np
    arr = np.empty((2,3))
    print(f"数组:\n{arr}")
    print(f"数组类型{type(arr)}")
    print(f"数组维度{arr.ndim}")
    print(f"数组元素个数{arr.size}")
    print(f"数组元素类型:{arr.dtype}")

arange ()

arange() 类似python 的 range() ,创建一个一维 ndarray 数组。

python 复制代码
# 生成一个1到5的数组(不包含5),步长为2,数据类型为int32
import numpy as np
arr = np.arange(1,5,2,dtype=np.int32)  
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组维度{arr.ndim}")
print(f"数组元素个数{arr.size}")
print(f"数组元素类型:{arr.dtype}")

matrix ()

matrix 是 ndarray 的子类,只能生成 2 维的矩阵

python 复制代码
# matrix()创建一个矩阵
import numpy as np
arr = np.matrix('1 2;3 4')
arr2 = np.matrix('1,2;3,4')
arr3 = np.matrix([[1,2],[3,4]])
print(f"数组:{arr}")
print(f"数组:{arr2}")
print(f"数组:{arr3}")

运行结果:

创建随机数矩阵

函数:rand(); randint(); uniform()

python 复制代码
# rand()函数创建随机数矩阵(浮点数)
# 创建一个二维数组,2行3列,元素随机,范围0-1(规定)
import numpy as np
arr = np.random.rand(2,3) 
print(f"数组:\n{arr}")
python 复制代码
# randint()函数创建随机数矩阵(整数)
import numpy as np

# 创建一个二维数组,2行3列,元素随机,范围2-7
arr = np.random.randint(2,8,size=(2,3)) 
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素类型:{arr.dtype}")
python 复制代码
# 随机生成矩阵(浮点数、范围可自定义)
import numpy as np
arr = np.random.uniform(1,5,size=(2,5))
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素个数{arr.size}")
print(f"数组元素类型:{arr.dtype}")

转换数据类型

python 复制代码
import numpy as np
arr = np.random.uniform(1,5,size=(2,5))
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素类型:{arr.dtype}")

arr1 = arr.astype(np.int32)
print(f"数组:\n{arr1}")
print(f"数组类型{type(arr1)}")
print(f"数组元素类型:{arr1.dtype}")

等比/等差数列

等比数列

python 复制代码
# 等比数列
# a = np.logspace(0,0,10)
# 第一个1:起始值的指数(10⁰)
# 第2个10:结束值的指数(10⁰)
# 第3个10:生成10个数
import numpy as np
a = np.logspace(0,0,10)
print(a)
python 复制代码
# 等比数列
# a = np.logspace(0,9,10,base = 2)
# 第1个0:起始值的指数
# 第2个9:结束值的指数
# 第3个10:生成10个数
# 第4个base = 2:指定生成数列的基数

import numpy as np
a = np.logspace(0,9,10,base = 2)
print(a)

等差数列

python 复制代码
# 第2个10:结束值
# 第3个10:生成10个数
a1 = np.linspace(0,10,10, endpoint= False) # 不包含结束值
"""
步长计算:(终止值 -起始值)/(元素的个数-1)=1.0
元素的计算:起始值 + 步长 *(索引值0~9)
1+1.0*0=1
1+1.0*1=2
1+1.0*2=3
"""
a2 = np.linspace(0,10,11, endpoint= True) # 包含结束值
"""
步长计算:(终止值 - 起始值)/(元素的个数)=(10-1)/10 =0.9
实际区间:数学表示为[1,10]
终点的计算:起始值 +步长*(元素的个数-1)=1+0.9*9=9.1
实际区间:[1,9.1)
元素的计算:起始值 +步长 *(索引值0~9)
1+0.9*0=1
1+0.9*1=1.9
1+0.9*2=2.8
1+0.9*9=9.1
"""
print(a1)
print(a2)

Numpy内置函数

基本函数

np.ceil(): 向上最接近的整数,参数是 number 或 array

np.floor(): 向下最接近的整数,参数是 number 或 array

np.rint(): 四舍五入,参数是 number 或 array

np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array

np.multiply(): 元素相乘,参数是 number 或 array

np.divide(): 元素相除,参数是 number 或 array

np.abs():元素的绝对值,参数是 number 或 array

np.where(condition, x, y): 三元运算符,x if condition else y

python 复制代码
import numpy as np

# 生成随机数组
arr = np.random.randn(2, 3)
print(f"原始数组:\n{arr}\n")

# 取整操作
print(f"向上取整 (ceil):\n{np.ceil(arr)}\n")
print(f"向下取整 (floor):\n{np.floor(arr)}\n")
print(f"四舍五入 (rint):\n{np.rint(arr)}\n")

# 特殊值检查
print(f"检查NaN值:\n{np.isnan(arr)}\n")

# 数组运算
print(f"元素相乘 (multiply):\n{np.multiply(arr, arr)}\n")
print(f"元素相除 (divide):\n{np.divide(arr, arr)}\n")

# 条件判断
print(f"条件赋值 (where):\n{np.where(arr > 0, 1, -1)}")

运行结果:

python 复制代码
原始数组:
[[-0.77870842  1.6587777   1.09137868]
 [ 0.54180519 -1.51279888  0.74223392]]

向上取整 (ceil):
[[-0.  2.  2.]
 [ 1. -1.  1.]]

向下取整 (floor):
[[-1.  1.  1.]
 [ 0. -2.  0.]]

四舍五入 (rint):
[[-1.  2.  1.]
 [ 1. -2.  1.]]

检查NaN值:
[[False False False]
 [False False False]]

元素相乘 (multiply):
[[0.60638681 2.75154347 1.19110743]
 [0.29355286 2.28856046 0.55091119]]

元素相除 (divide):
[[1. 1. 1.]
 [1. 1. 1.]]

条件赋值 (where):
[[-1  1  1]
 [ 1 -1  1]]

统计函数

np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array

np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array

np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array

np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array

np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array

python 复制代码
import numpy as np
arr = np.arange(12).reshape(3,4) # 3行4列的二维数组
print(f"数组:{arr}")

# 2: 演示cumsum(),累加和
print(f"累加和:{np.cumsum(arr)}") # 累加和:[ 0  1  3  6 10 15 21 28 36 45 55 66]

# 3: 演示sum(), 所有元素的和
print(f"所有元素的和:{np.sum(arr)}") # 所有元素的和:66
print(f"所有元素的按列求和:{np.sum(arr, axis=0)}") # 所有元素的按列求和:[12 15 18 21]
print(f"所有元素的按行求和:{np.sum(arr, axis=1)}") # 所有元素的按行求和:[ 6 22 38]

运行结果:

比较函数

np.any(): 至少有一个元素满足指定条件,返回True

np.all(): 所有的元素满足指定条件,返回True

python 复制代码
import numpy as np
arr = np.random.randn(2, 3)
print(f"数组:{arr}")

print(f"至少有一个元素满足指定条件:{np.any(arr > 0)}")
print(f"所有的元素满足指定条件:{np.all(arr > 0)}")

运行结果:

去重函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合

python 复制代码
import numpy as np
arr = np.array([[1, 2, 1, 6], [1, 3, 2,5]]) # 列数需要一致
print(f"数组:{arr}")

# 2:去重
print(f"去重:{np.unique(arr)}")

运行结果:

排序函数

方式1:np.sort(arr):排序,并返回排序后的结果

方式2:arr.sort():排序,并修改原数组

python 复制代码
import numpy as np
# 1:创建nparray对象
arr = np.array([1, 5, 3, 2, 6])
print(f"数组:{arr}")

# 2: 排序
arr_new = np.sort(arr)
print(f"排序后的结果:{arr_new}")

# 3:排序修改原数组
arr.sort() # 直接对原数组对象进行排序
print(f"排序后的结果:{arr}")

运行结果:

相关推荐
独行soc1 小时前
2025年渗透测试面试题总结-18(题目+回答)
android·python·科技·面试·职场和发展·渗透测试
S01d13r2 小时前
gunicorn + flask 处理高并发请求
python·flask·gunicorn
杜子不疼.2 小时前
《Python列表和元组:从入门到花式操作指南》
开发语言·python
max5006002 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
秋氘渔3 小时前
综合案例:Python 函数知识整合 — 学生成绩管理系统
开发语言·python
AI 嗯啦4 小时前
SQL详细语法教程(三)mysql的函数知识
android·开发语言·数据库·python·sql·mysql
databook4 小时前
把数学对象画出来:Manim Mobject类库速查手册
python·数学·动效
图灵学术计算机论文辅导4 小时前
傅里叶变换+attention机制,深耕深度学习领域
人工智能·python·深度学习·计算机网络·考研·机器学习·计算机视觉
ruleslol5 小时前
python30-正则表达式
python·正则表达式