Numpy 库 矩阵数学运算,点积,文件读取和保存等

目录

1.数组(矩阵)的组合

2.数组(矩阵)的切割

3.数组的数学运算

4.数组的深拷贝和浅拷贝

5.随机模块

6.矩阵统计运算

7.矩阵的特有运算点积,求逆

8.文件读取和保存


1.数组(矩阵)的组合

  • 水平组合(hstack)和垂直组合(vstack):

    • hstack 将多个矩阵按列方向拼接(如三行三列 + 三行三列 → 三行六列)。
    • vstack 将多个矩阵按行方向拼接(如三行三列 + 三行三列 → 六行三列)。
  • concatenate 函数,可通过 axis 参数指定组合方向(axis=0 为垂直,axis=1 为水平 )。

    python 复制代码
    import numpy as np
    array1=np.arange(9).reshape(3,3)
    print(array1)
    [[0 1 2]
     [3 4 5]
     [6 7 8]]
    array2=2*array1
    print(array2)
    [[ 0  2  4]
     [ 6  8 10]
     [12 14 16]]
    
    # 水平组合
    a3=np.hstack((array1,array2))
    print(a3)
    [[ 0  1  2  0  2  4]
     [ 3  4  5  6  8 10]
     [ 6  7  8 12 14 16]]
    a4=np.hstack((array2,array1))
    print(a4)
    [[ 0  2  4  0  1  2]
     [ 6  8 10  3  4  5]
     [12 14 16  6  7  8]]
    a5=np.hstack((array1,array2,array1))
    print(a5)
    [[ 0  1  2  0  2  4  0  1  2]
     [ 3  4  5  6  8 10  3  4  5]
     [ 6  7  8 12 14 16  6  7  8]]
    a6=np.concatenate((array1,array2),axis=0)#连接
    print(a6)
    [[ 0  1  2]
     [ 3  4  5]
     [ 6  7  8]
     [ 0  2  4]
     [ 6  8 10]
     [12 14 16]]
    #垂直组合
    a7=np.vstack((array1,array2))
    print(a7)
    [[ 0  1  2]
     [ 3  4  5]
     [ 6  7  8]
     [ 0  2  4]
     [ 6  8 10]
     [12 14 16]]

2.数组(矩阵)的切割

  • 水平切割(hsplit)和垂直切割(vsplit):

    • hsplit(array, 2) 将矩阵水平切分为两部分(如四行四列 → 两个四行两列)。
    • vsplit 按行切分(如四行四列 → 两个两行四列)。
  • split()函数,通过 axis 参数指定切分方向。

    python 复制代码
    import numpy as np
    array1=np.arange(16).reshape(4,4)
    print(array1)
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]]
    
    # 水平切割
    a=np.hsplit(array1,2)#2表示二等分切割
    print(a)
    [array([[ 0,  1],
           [ 4,  5],
           [ 8,  9],
           [12, 13]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11],
           [14, 15]])]
    
    b=np.split(array1,2,axis=1)
    print(b)
    [array([[ 0,  1],
           [ 4,  5],
           [ 8,  9],
           [12, 13]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11],
           [14, 15]])]
    
    # 垂直切割
    c=np.vsplit(array1,2)
    print(c)
    [array([[0, 1, 2, 3],
           [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
           [12, 13, 14, 15]])]
    
    d=np.split(array1,2,axis=0)
    print(d)
    [array([[0, 1, 2, 3],
           [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
           [12, 13, 14, 15]])]
  • 补充:强制切割array_split),当无法均分时按近似规则切分(如五行五列按列切三份 → 2列+2列+1列)。

    python 复制代码
    # 强制切割
    # 水平切割
    e=np.array_split(array1,3,axis=1)
    #垂直切割
    f=np.array_split(array1,3,axis=0)

3.数组的数学运算

python 复制代码
import numpy as np
array1=np.arange(1,5,1).reshape(2,2)
print(array1)
[[1 2]
 [3 4]]
array2=2*array1
print(array2)
[[2 4]
 [6 8]]

# 数组的加法运算(对应位置的元素求和)
print(array1+array2)
[[ 3  6]
 [ 9 12]]
# 数组的减法运算(对应位置的元素求差)
print(array1-array2)
[[-1 -2]
 [-3 -4]]
# 数组的乘法运算(对应位置的元素相乘)
print(array1*array2)
[[ 2  8]
 [18 32]]
# 数组的除法运算(对应位置的元素相除)
print(array1/array2)
[[0.5 0.5]
 [0.5 0.5]]
# 数组的取余运算(%)
print(array1%array2)
[[1 2]
 [3 4]]
# 数组的取整运算
print(array1//array2)
[[0 0]
 [0 0]]

4.数组的深拷贝和浅拷贝

浅拷贝(赋值 )会导致原数组与拷贝数组同步修改 (如 array2 = array1)。

深拷贝(array.copy() )独立于原数组,修改不影响原数据。

5.随机模块

使用随机种子(numpy.random.seed)控制随机数生成,仅对 numpy.random 有效。

生成随机数的方法:randint(整数)、rand(0-1小数)、normal(正态分布)。

正态分布参数:均值(loc)控制中心位置,标准差(scale)控制离散程度。

批量生成随机矩阵(如 size=(5,5))。

python 复制代码
import numpy as np
r1=np.random.rand()
print(r1)
0.8149436420776961

r2=np.random.normal()
print(r2)
-1.1160570318641674

# 生成随机数矩阵
r3=np.random.randint(0,10,size=(5,5))
print(r3)
[[8 9 2 2 6]
 [4 9 7 9 7]
 [0 0 9 7 8]
 [1 4 1 8 0]
 [2 0 2 2 9]]
    
r4=np.random.rand(5,5)
print(r4)
[[0.60023193 0.01419595 0.05549209 0.67160039 0.78314385]
 [0.19544064 0.73777977 0.85955638 0.34585567 0.13006794]
 [0.36708803 0.16558952 0.44353464 0.06849265 0.86387693]
 [0.05052874 0.16835242 0.04308036 0.19164382 0.27588562]
 [0.40844913 0.22696977 0.47796595 0.0091897  0.37547072]]

r5=np.random.normal(5,10,size=(5,5))
print(r5)
[[  1.0609002   -8.5392921    9.48242322   0.75154795   3.48753174]
 [ -4.0785129    8.4907759    6.11792809   2.05999932  -1.01203744]
 [ -9.74659156   5.86627773  -6.91534249  28.65949618  -4.39634281]
 [ -3.26680732   2.22344898  -0.54337157  -3.92376473  15.58922743]
 [-15.10813251  -1.25358692  -9.96625947   4.65529048  -7.1070343 ]]

6.矩阵统计运算

基础统计:方差(var)、标准差(std)、均值(mean)、求和(sum)、中位数(median)。

按行/列求和:通过 axis 参数(axis=1 为行,axis=0 为列)。

python 复制代码
import numpy as np

array1=np.random.normal(size=(3,3))
print(array1)
[[-1.84629    -1.50233883 -0.30569565]
 [-1.01779658 -1.12859979  0.48594668]
 [ 1.01978122 -1.22772969 -0.22122007]]

# 求方差
print(array1.var())
0.8039318921061643

# 求标准差
print(array1.std())
0.8966224914121685

# 求均值
print(array1.mean())
-0.638215856182889

# 求和
print(array1.sum())
-5.743942705646001
# 求中位数
print(np.median(array1))
-1.0177965755982301
# 对矩阵的行求和
print(array1.sum(axis=1))
[-3.65432448 -1.66044968 -0.42916854]
# 对矩阵的列求和
print(array1.sum(axis=0))
[-1.84430536 -3.85866831 -0.04096904]

7.矩阵的特有运算点积,求逆

  • 点乘:a.dot(b)numpy.dot(a, b),示例演示了矩阵乘法规则(如形状匹配)。

  • 求逆:numpy.linalg.inv,验证逆矩阵的正确性(原矩阵与逆矩阵相乘为单位矩阵)。

    python 复制代码
    import numpy as np
    a=np.arange(4).reshape(2,2)
    [[0 1]
     [2 3]]
    b=a.copy()
    [[0 1]
     [2 3]]
    a1=a.dot(b)
    print(a1)
    [[ 2  3]
     [ 6 11]]
    a2=np.dot(a,b)
    print(a2)
    [[ 2  3]
     [ 6 11]]         
    
    # 并不是所有矩阵都有逆,即使你没有,也会给你一个伪逆
    a3=np.linalg.inv(a)
    print(a3)
    [[-1.5  0.5]
     [ 1.   0. ]]

    8.文件读取和保存

  • 直接读取文本文件为矩阵:numpy.loadtxt,支持按分隔符解析数据,对于使用 tab 键分隔的文件,分隔符应设置为 \t;对于 CSV 文件,分隔符应设置为逗号(,)。

  • numpy.save 将矩阵存储为文件,存储的文件可直接打开查看矩阵内容。

  • 优势:避免手动转换字符串为数值类型,适合机器学习数据预处理

    python 复制代码
    # import numpy as np
    # data = np.loadtxt('',delimiter='')#delimiter指定分隔符
    
    
    # 将数组保存到txt文件中
    import numpy as np
    array=np.array([[1,2,3],[4,5,6],[7,8,9]])
    np.savetxt('array.txt',array)
相关推荐
love530love1 分钟前
Windows 如何更改 ModelScope 的模型下载缓存位置?
运维·人工智能·windows·python·缓存·modelscope
科大饭桶22 分钟前
数据结构自学Day15 -- 非比较排序--计数排序
数据结构·算法·leetcode·排序算法·c
剪一朵云爱着33 分钟前
力扣二叉树的前序中序后序遍历总结
算法·leetcode·二叉树
乌萨奇也要立志学C++39 分钟前
【洛谷】单向链表、队列安排、约瑟夫问题(list相关算法题)
算法·链表·list
橘颂TA40 分钟前
【C++】C++11特性的介绍和使用(第三篇)
前端·c++·算法·c++11
丶小鱼丶2 小时前
栈算法之【有效括号】
java·算法
一百天成为python专家3 小时前
数据可视化
开发语言·人工智能·python·机器学习·信息可视化·numpy
金井PRATHAMA3 小时前
主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示
人工智能·神经网络·自然语言处理
说私域3 小时前
技术赋能与营销创新:开源链动2+1模式AI智能名片S2B2C商城小程序的流量转化路径研究
人工智能·小程序·开源
小徐不徐说5 小时前
每日一算:华为-批萨分配问题
数据结构·c++·算法·leetcode·华为·动态规划·后端开发