首页 > 其他分享 >深度学习的12 个矩阵运算

深度学习的12 个矩阵运算

时间:2025-01-12 17:03:49浏览次数:3  
标签:given 12 运算 矩阵 print elements np matrix

在深度学习中,前馈神经网络是一种最简单且非常有用的网络。在后台,前馈神经网络只是一个复合函数,它将一些矩阵和向量相乘。

在这里插入图片描述

并不是说向量和矩阵是执行这些操作的唯一方法,但如果你这样做,它们就会变得非常高效。深度学习背后的核心数据结构包括
• 标量
• 向量
• 矩阵和
• 张。
矩阵运算用于许多深度学习算法的描述。

在这里插入图片描述

因此,如果您真的想成为深度学习领域的专业人士,那么您就无法逃避掌握其中的一些概念。因此,在本文中,我们将讨论用于描述深度学习方法的重要线性代数矩阵运算。
目录
我们将在本文中讨论的主题如下:
• 什么是矩阵?
• 如何加减不同的矩阵?
• 如何找到给定矩阵的形状和大小?
• 如何将密集矩阵转换为稀疏矩阵?
• 如何找到矩阵的转置?
• 如何找到矩阵的均值、方差和标准差?
• 如何找到矩阵的轨迹?
• 如何从矩阵中提取最小和最大元素?
• 如何找到矩阵的行列式?
• 如何乘以给定的矩阵?
• 如何将特定操作应用于矩阵的每个元素?
• 如何找到矩阵的逆函数?
• 如何将矩阵重塑为不同的大小?
什么是矩阵?
矩阵是由数字组成的矩形数组,可以看作是 2个 nd 阶张量。如果 m 和 n 是正整数,即 m、n ∈ N,则 m×n 矩阵包含 m*n 个元素,其中 m 个行数和 n 个列数。
m×n 矩阵的图形表示如下所示:
在这里插入图片描述

有时,我们使用以下矩阵的缩写来代替完整的矩阵组件:
在这里插入图片描述

例如-
在这个例子中,在 numpy 库的帮助下,我们将创建一个矩阵。并检查形成的矩阵的维度。

import numpy as np
matrix = np.array([[45,34],[67,58]])
# Create a matrix
print("The original matrix is given by n", matrix)
# Check the dimension of the matrix
print("The dimension of the given matrix is", matrix.ndim)

矩阵加法和减法

在这里插入图片描述

在本节中,我们将使用 add 和 subtract 方法进行矩阵加法和减法。这些方法采用两个参数,并分别返回这些矩阵的和值和差值。如果矩阵的形状不同,则会引发一个错误,指出无法进行加法或减法。

matrix_1 = np.array([[45,34],[67,58]])
matrix_2 = np.array([[35,24],[57,48]])
# Add the two matrices
print("The result after adding matrix 1 and matrix 2 is given by n" , np.add(matrix_1, matrix_2))
# Subtract one matrix from the other matrices
print("The result after subtracting matrix 1 from matrix 2 is given by n" , np.subtract(matrix_1, matrix_2))
print("The result after subtracting matrix 2 from matrix 1 is given by n" , np.subtract(matrix_2, matrix_1))

输出:

The result after adding matrix 1 and matrix 2 is given by 
 [[ 80  58]
 [124 106]]
The result after subtracting matrix 1 from matrix 2 is given by 
 [[10 10]
 [10 10]]
The result after subtracting matrix 2 from matrix 1 is given by 
 [[-10 -10]
 [-10 -10]]

矩阵的形状和大小
在本节中,我们将找到形状,即给定矩阵中的行数和列数,以及大小,即给定矩阵的矩阵中的元素数。

matrix = np.array([[45,34,75],[67,58,89]])
# Finding number of rows and columns in the matrix
print("The number of rows and columns in the given matrix are " + str(matrix.shape[0]) + " and " + str(matrix.shape[1]) + " respectively")
# Number of elements in the matrix
print("The size of the given matrix is" , matrix.size)

输出:

The number of rows and columns in the given matrix are 2 and 3 respectively
The size of the given matrix is 6

将给定的 Dense 矩阵转换为 Sparse 矩阵
让我们首先了解 Sparse 和 Dense Matrix 的确切含义。
稀疏矩阵是主要由零值组成的矩阵。稀疏矩阵不同于大部分非零值的矩阵,后者被称为密集矩阵。

在这里插入图片描述

from scipy import sparse
# Create a Dense Matrix
dense_matrix = np.array([[0,0],[0,17],[78,0]])
# Convert Dense matrix to Sparse matrix
sparse_matrix = sparse.csr_matrix(dense_matrix)
print("The sparse matrix corresponding to a given dense matrix is given by n" , sparse_matrix)

输出:

The sparse matrix corresponding to a given dense matrix is given by 
   (1, 1)	17
  (2, 0)	78

矩阵转置
在 Matrix Transpose 中,我们可以将行向量转换为列向量,反之亦然,即 row 变成 columns,columns 变成 rows。
如果我们有矩阵 A = [aij]MXN,则此矩阵的转置为 AT= [aij]n×m

在这里插入图片描述

import numpy as np
matrix = np.array([[45,34],[67,58]])
print("The original matrix is given by n" , matrix)
print("The transpose matrix of the given matrix is n" , matrix.T)

输出:

The original matrix is given by 
 [[45 34]
 [67 58]]
The transpose matrix of the given matrix is 
 [[45 67]
 [34 58]]

矩阵的均值、方差和标准差
在本节中,我们将尝试找到一些与矩阵相关的统计内容。在这里,我们使用 numpy 函数计算矩阵的平均值、方差和标准差。

import numpy as np
matrix = np.array([[45,34],[67,58], [23,89]])
# Finding the mean of a matrix elements
print("The mean of the elements of a matrix is equal to", np.mean(matrix))
# Finding the Variance of a matrix elements
print("The variance of the elements of a matrix is equal to", np.var(matrix))
# Finding the Standard Deviation of a matrix elements
print("The standard deviation of the elements of a matrix is equal to", np.std(matrix))
print("The standard deviation of the elements of a matrix is equal to", np.sqrt(np.var(matrix)))

输出:

The mean of the elements of a matrix is equal to 52.666666666666664
The variance of the elements of a matrix is equal to 473.5555555555555
The standard deviation of the elements of a matrix is equal to 21.761331658599286
The standard deviation of the elements of a matrix is equal to 21.761331658599286

矩阵的跟踪
在这里插入图片描述

在本节中,我们将尝试找到矩阵的轨迹,即给定矩阵中存在的所有对角线元素的总和。

import numpy as np
matrix = np.array([[1,2,3],[4,5,6], [7,8,9]])
# Get the diagonal elements of a matrix
print("The diagonal elements of a given matrix are n", matrix.diagonal())
# Finding the trace of the matrix
print("The trace of a given matrix is equal to", matrix.diagonal().sum())

输出:

The diagonal elements of a given matrix are 
 [1 5 9]
The trace of a given matrix is equal to 15

从 Matrix 中查找最小和最大元素
在本节中,我们将尝试找到矩阵的最小和最大元素,即所有元素中具有最高和最低值的元素。

import numpy as np
matrix = np.array([[1,2,3],[4,5,6], [7,8,9]])
# Find the minimum element of the matrix
print("The minimum element in a given matrix is", np.min(matrix))
# Find the maximum element of the matrix
print("The maximum element in a given matrix is", np.max(matrix))

输出:

The minimum element in a given matrix is 1
The maximum element in a given matrix is 9

矩阵的行列式
在这里插入图片描述

在本节中,我们将尝试找到矩阵的行列式。在这里,为了计算行列式,我们使用 Numpy 包中的线性代数模块。

import numpy as np
matrix = np.array([[1,2,4],[3,4,6], [7,8,5]])
# Find the determinant of the matrix
print("The determinant of the given matrix is equal to", np.linalg.det(matrix))

输出:

The determinant of the given matrix is equal to 9.999999999999993

矩阵乘法
形状为 (m x n) 的矩阵和形状为 (n x p) 的 B 矩阵相乘,得到形状为 (m x p) 的 C。请记住,在对矩阵进行乘法时,第一个矩阵中的列数与第二个矩阵中的行数相同,以便无误地执行乘法。
在这里插入图片描述

在本节中,我们将尝试求两个矩阵的乘法。

import numpy as np
matrix_1 = np.array([[45,34],[67,58]])
matrix_2 = np.array([[35,24],[57,48]])
print("The matrix multiplication of given two matrices is given by n", np.matmul(matrix_1, matrix_2))

输出:

The matrix multiplication of given two matrices is given by 
 [[3513 2712]
 [5651 4392]]

使用内联函数 (Lambda) 的元素操作
在此示例中,我们将尝试为矩阵的每个元素添加某个值。

import numpy as np
matrix = np.array([[1,2,4],[3,4,6], [7,8,5]])
addition = lambda i:i+5
add_5_vec = np.vectorize(addition)
print("The matrix after adding 5 to all its elements is n", add_5_vec(matrix))

输出:

The matrix after adding 5 to all its elements is 
 [[ 6  7  9]
 [ 8  9 11]
 [12 13 10]]

矩阵的逆
在本节中,我们将尝试找到矩阵的逆函数。

import numpy as np
matrix = np.array([[1,2,4],[3,4,6], [7,8,5]])
# Finding the inverse of a matrix
print("The inverse matrix of a given matrix is n", np.linalg.inv(matrix))

输出:

The inverse matrix of a given matrix is 
 [[-2.8  2.2 -0.4]
 [ 2.7 -2.3  0.6]
 [-0.4  0.6 -0.2]]

重塑给定的矩阵
在本节中,我们将尝试重塑给定的矩阵,即更改给定矩阵的形状。但在这里我们必须注意,重塑矩阵后大小保持不变,即元素的数量保持不变。

import numpy as np
matrix = np.array([[1,2,4],[3,4,6],[7,8,5],[9,2,1]])
print("The reshaped matrix is given by n", matrix.reshape(6,2))

输出:

The reshaped matrix is given by 
 [[1 2]
 [4 3]
 [4 6]
 [7 8]
 [5 9]
 [2 1]]

最后推荐:一个GPU矩阵乘法运算工具-GPUMatrix1.23【Windows版本】
https://download.csdn.net/download/axecute/90253223
在这里插入图片描述

标签:given,12,运算,矩阵,print,elements,np,matrix
From: https://blog.csdn.net/axecute/article/details/145064345

相关文章

  • 1.12 CW 模拟赛 T1. 括号序列
    思路根据赛时的检验,典型的动点问题的\(\rm{trick}\)并不能在这里使用,也就是说,分类讨论前缀+\(i\)+后缀前缀+\(i\)后缀+\(i\)是不可行的考虑括号串问题的常见做法,先将其赋值成\(1,-1\)之后进行处理你发现这种做法有枚举字段和的瓶颈,所以也不可行......
  • Java程序员不得不会的124道面试题(含答案)
    1)什么是线程局部变量?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何......
  • 782、基于51单片机的电子钟仿真设计(12864)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能LCD显示的定时闹钟1、显示时钟时间,格式为“时时:分分”,并可重新设置。2、显示闹铃时间,格式为“时时:分分”,且显示闪烁以便与时钟时间相区分......
  • 2025/1/12 力扣每日一题(2275.按位与结果大于零的最长组合)
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/largest-combination-with-bitwise-and-greater-than-zero/description/?envType=daily-question&envId=2025-01-12题目:对数组nums执行按位与相当于对数组nums中的所有整数执行按位与。例如,对nums=[1,5,3]来......
  • 2025/01/12 力扣每日一题
    2275.按位与结果大于零的最长组合对数组nums执行按位与相当于对数组nums中的所有整数执行按位与。例如,对nums=[1,5,3]来说,按位与等于1&5&3=1。同样,对nums=[7]而言,按位与等于7。给你一个正整数数组candidates。计算candidates中的数字每种......
  • Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟
    DangerousSugoroku:赛时写了矩乘T飞了,受到sunkuangzheng大佬的启发才知道要状压矩乘。暴力矩乘思路直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路,利用矩阵分段加速。定义\(dp_i\)表示\(i\)能否到达,则有如下转移:\[dp_{i}=\bigvee_{j=i-B}^{i-A}dp_{j}\]......
  • 2025/01/12 cpp学习日记
    学到的新知识std::vector::resizestd::vector::resize是C++标准库中std::vector类的一个成员函数,用于调整向量的大小。它可以增加或减少向量中元素的数量,并根据需要初始化新元素或删除多余的元素。函数原型std::vector::resize有两个重载版本:调整大小并默认初始化新......
  • 1.12 CW 模拟赛 赛时记录
    看题不是哥们怎么感觉一堆原题但是都不会做没复习最悲惨的一次策略肯定还是暴力,没有什么看上去简单的题\(\rm{T1}\)思路侥幸心理找了一下没有啊,必须自己想合法串显然就是满足匹配的串考虑这种经典问题的常见转化:令(为\(1\),)为\(-1\),合法括号串仅当其任......
  • 【JavaWeb学习Day12】
    MyBatis简介:Mybatis是一款优秀的持久层框架,用于简化JDBC的开发。Mybatis本是Apache的一个开源项目ibatis,2010年这个项目由apache迁移到了googlecode,并且改名为Mybatis。2013年11月迁移到github官网:https://mybatis.org/mybatis-3/zh/index.html01.入门程序:使用Mybatis查......
  • 【LeetCode: 240. 搜索二维矩阵 II + 指针 + 遍历】
    ......