矩阵加法

tensorflow--矩阵操作

匿名 (未验证) 提交于 2019-12-02 23:47:01
import tensorflow as tf #矩阵类型 myzero = tf.zeros([3,5]) #定义3行5列的0矩阵 myones = tf.ones([2,3]) #定义2行3列的矩阵 myfill = tf.fill([3,3],15) #定义3行3列的填充矩阵,填充值为15 myli = tf.linspace(0.0,5.,15) #0到5等分为15份 random_mat = tf.random_uniform([2,3],-2,5) #定义2行3列的-2到5的随机矩阵 data1 = tf.constant([[1,3],[2,5],[3,6]]) data2 = tf.constant([[1,2]]) data3 = tf.constant([[3],[4]]) data4 = tf.constant([[2,2]]) myadd = tf.add(data2,data4) #矩阵加法 mymul = tf.matmul(data2,data3) #矩阵乘法 mymultiply = tf.multiply(data2,data3) #矩阵直接相乘 print(data1.shape) # print(data1[0,:]) with tf.Session() as sess: # print(sess.run(myzero)) # print()

从0开始学算法--数学(4.1矩阵)

为君一笑 提交于 2019-12-02 03:02:46
1,概念 以下词条解释来自百度百科:代数,代数系统,线性代数,矩阵 代数   代数是研究数、数量、关系、结构与代数方程(组)的通用解法及其性质的数学分支。 初等代数 一般在中学时讲授,介绍代数的基本思想:研究当我们对数字作加法或乘法时会发生什么,以及了解变量的概念和如何建立 多项式 并找出它们的根。代数的研究对象不仅是数字,而是各种抽象化的结构。在其中我们只关心各种关系及其性质,而对于“数本身是什么”这样的问题并不关心。常见的代数结构类型有群、 环 、域、模、 线性空间 等。 代数系统   非空集合A和A上k个一元或二元运算f1,f2,…,fk组成的系统称为一个代数系统,简称代数,记作(A,f1,f2,…,fk)。由定义可知,一个代数系统需要满足下面3个条件:(1)有一个非空集合A;(2)有一些建立在集合A上的运算;(3)这些运算在集合A上是封闭的。有的书上对代数系统定义时不要求运算的封闭性,而是把具有封闭性的代数系统定义为一个新的概念- 广群 。 线性代数   线性代数是数学的一个分支,它的研究对象是 向量 , 向量空间 (或称线性空间), 线性变换 和有限维的 线性方程组 。向量空间是 现代数学 的一个重要课题;因而,线性代数被广泛地应用于 抽象代数 和 泛函分析 中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的 非 线性模型

矩阵乘法与邻接矩阵

不羁的心 提交于 2019-12-02 02:37:21
矩阵乘法与邻接矩阵 引例 \(1:\) [TJOI2017]可乐 相信很多人都能想出一个 \(\Theta(t\times m)\) 的做法.(虽然我没想出来,但这只是因为我菜) 问题简化一下,如果我们没有在原地停留和自爆两个操作,那么就是问从起点出发,走 \(t\) 步的不同路径数. 这个问题怎么做呢? 不考虑 \(Dp\) . 令该图的邻接矩阵是 \(G\) , 那么我们考虑 \(G^2\) 是个什么东西.(此处的幂运算是指矩阵的幂). 我们单独考虑某一行和某一列的相关运算 \(:\) 令其为 \(G_{a,i}\) 和 \(G_{i,b}\) , 令 \(G'\) 为相乘得到的矩阵,那么会有 \(:\) \[G'_{a,b} = \sum_{i=1}^m{G_{a,i}\times G_{i,b}}\] 容易发现,当且仅当 \(G_{a,i}\) 和 \(G_{i,b}\) 都不为零,即 \(i\) 点可连通 \(a,b\) 两点的时候上式的该项才为 \(1\) , 否则为零. 那么所有的这些情况累加起来,就是从 \(a\) 到 \(b\) 长度为 \(2\) 的路径条数.(即走 \(2\) 步从 \(a\) 走到 \(b\) 的方案数,长度是 \(2\) 是因为经过一个中间点.) 由此,我们可以得到, \(G^2\) 得到的矩阵其实表示了任意两点间长度为 \(2\)

Numpy中矩阵和数组的区别

懵懂的女人 提交于 2019-12-01 17:02:20
矩阵(Matrix)和数组(Array)的区别主要有以下两点: 矩阵只能为2维的,而数组可以是任意维度的。 矩阵和数组在数学运算上会有不同的结构。 代码展示 1.矩阵的创建 采用mat函数创建矩阵 class numpy.mat(data, dtype=None) (注释:Unlike matrix, asmatrix does not make a copy if the input is already a matrix or an ndarray. Equivalent to matrix(data, copy=False).这句话的含义也就是说,当传入的参数为一个矩阵或者ndarray的数组时候,返回值是和传入参数相同的引用,也就是当传入参数发生改变时候,返回值也会相应的改变。相当于numpy.matrix(data, copy=False)) import numpy as np e = np.array([[1, 2], [3, 4]]) # 传入的参数为ndarray时 # e= np.matrix([[1, 2], [3, 4]]) # 传入的参数为矩阵时 print(e) print('e的类型:', type(e)) print('---'*5) e1 = np.mat(e) print(e1) print('e1的类型:', type(e1)) print('

矩阵入门

大憨熊 提交于 2019-12-01 12:40:50
什么是矩阵 在数学中,矩阵(Matrix)是一个按照长方阵列排列的 复数 或 实数 集合 ,最早来自于 方程组 的 系数 及 常数 所构成的方阵(摘自某百科) \(n\) 行 \(m\) 列的矩阵大概长这个样子 : \[ A = \left[\begin{array}{c}a_{1,1}&a_{1,2}&\cdots&a_{1,m}\\a_{2,1}&a_{2,2}&\cdots&a_{2,m}\\a_{3,1}& a_{3,2}&\cdots&a_{3,m}\\\cdots&\cdots& &\cdots\\a_{n,1}& a_{n,2}&\cdots&a_{n,m}\end{array}\right] \] 这 \(n \times m\) 个数称为矩阵 \(A\) 的元素,简称为元 数 \(a_{i,j}\) 位于矩阵的第 \(i\) 行第 \(j\) 列 矩阵的基本运算 加法 注意 : 只有 相同大小 的矩阵才可以相加 \[ \left[\begin{array}{c}1&4\\3&2\end{array}\right]+\left[\begin{array}{c}4&2\\5&7\end{array}\right]=\left[\begin{array}{c}5&6\\8&9\end{array}\right] \] 矩阵的加法满足 交换律 和 结合律 即 : \(A

AES算法详解

限于喜欢 提交于 2019-12-01 07:19:56
AES算法简介   AES的全称是Advanced Encryption Standard,意思是高级加密标准。 AES密码分组大小和密钥大小可以为128位、192位和256位。然而AES只要求分组大小为128位。本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。    AES算法使用逻辑就是:发送方将要发送的明文数据X使用秘钥K进行AES加密后会得到密文Y,将密文进行网络传输,接受方在收到密文Y后使用秘钥K进行AES解密后技能得到明文X,这样即使密文Y在网络上传输时被截获了,没有秘钥也难以破解其真实意思。 AES算法相关数学知识   在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识如下: 素域:   有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆运算。而在密码编码学中,我们只研究拥有有限个元素的域,也就是有限域。域中包含元素的个数称为域的阶。只有当m是一个素数幂时,即m=p n (其中n为正整数是p的次数,p为素数),阶为m的域才存在。p称为这个有限域的特征。 也就是说

向量、矩阵几何意义

主宰稳场 提交于 2019-11-30 20:03:40
向量 点 - 标量 scalar 描述二维、三维空间一个点的坐标。例如点 a(a x , a y ) 或 a(a x , a y , a z ) 向量 - 矢量 (vector) 方向 (direction) 模 (magnitude ,俗称长度 ) 的有向线段 例如 a (a x , a y ) 或 a (a x , a y , a z ), 那这与点有什么区别呢? ( 加 粗 的区别 ) 单位向量 - 归一化运算 normalized vector 对 a (a x , a y ) 归一化运算 = 向量运算 - 加法 ( 向量对向量 ) 加法可以求两向量的半角向量 设向量 a = (a x , a y , a z ) ,向量 b = (b x , b y , b z ) , 向量 c c = a + b = (a x , a y , a z ) + (b x , b y , b z ) = (a x + b x , a y + b y , a z + b z ) 平行四边形法则: 三角形法则:首尾相连 ( 谁在前谁就是结果向量起始点 ) 向量运算 - 减法 ( 向量对向量 ) 向量减法可以求两个向量的相对偏移距离。 例如点 b 相对于点 a 的偏移距离 谁在后谁就是结果向量起始点 c = b – a , 再对 c 取模运算就可得到二者间的距离 向量运算 - 向量乘法 向量与标量

为什么会有矩阵这东西,矩阵到底有什么用

亡梦爱人 提交于 2019-11-30 13:19:02
在《线性代数》书中, 行列式 和 矩阵 总是如影随行,而且两个确实长得很相似,所以也经常有人混淆两者。 矩阵:有勾必火 行列式: 是指将一些数据建立成 计算方阵 ,经过 规定的计算方法最终得到 一个数 。换句话说, 行列式代表的是一个值 。 而 矩阵 则不同,矩阵表示的是一个 数表,是一个数据的集合体 。换句话说,矩阵更神似于一张n行m列的数字表格,或者Excel表。 最近这几天,京西旅馆的大厨还没到位,采购蔬菜的事情还是落在了小天的身上。 这不,精打细算(抠门)的刘强西就派小天到 村头菜市场 、 村尾王大妈菜摊 和 隔壁村老王农场 去调研不同菜品的价格,说是不能乱花一分钱。。。 小天分别去三个地方分别调研了三种菜品,发现价格真有不同。。。 而之后小天便将得到的数据用矩阵表示出来。 刘强西看到小天提供的矩阵:这是什么鬼,小天,你干嘛用矩阵来表示呀?! 小天:因为矩阵也是一种 表示多维度数据的方式 呀! 刘强西:但这个比Excel表难看,不喜欢,而且没什么用。 小天此时露出鄙夷的眼光:刘boss,你竟然说矩阵没什么用(这个也不怪你,就是现在还有人说数学没什么用),其实之所以做成矩阵的形式,就为了四个字: 便于计算 。 我记得上一次你还跟我说过三种蔬菜的需求量,那我们将需求量做成 需求矩阵B : 那我们就可以得到三个地方的价格( 价格矩阵C ): 如何知道矩阵乘法的本质是什么?

Python与线性代数基本概念

牧云@^-^@ 提交于 2019-11-30 08:15:26
在Python中使用Numpy创建向量: x = np.array([1, 2, 3, 4]) 创建3 x 3矩阵 B = np.array([[1, 2],[3, 4],[5, 6]]) Shape形状,也可称为维度,表示矩阵中每个维度的具体数值; B.shape 3 x 2 转置 行向量可转置为列向量,列向量转置为行向量 如为方阵转置后行数列数不变,对于非方阵,2 x 3矩阵转置后为3 x 2矩阵 B_t = A.T 检查转置后形状shape B_t.shape 矩阵加法 矩阵相加为两个矩阵对应的元素相加; A = np.array([1,2],[3,4]) B = np.array([4,5],[5,6]) C = A + B = [[5, 7],[8, 10]] 如标量与矩阵相加规则为:标量与矩阵中对应的每个元素相加; 广播   广播为Numpy的机制,使得Numpy可以处理各个不同形状(shape)之间的操作,较小的阵列将会被扩充以匹配较大的阵列形状;   就如上面使用标量与矩阵做相加元素,实际上Numpy把标量转成了与矩阵相同维度的矩阵与该矩阵进行相加;   比如一个3 x 2 矩阵与一个3 x 1矩阵相加,Numpy会自动把3 x 1矩阵复制一列形成3 x2矩阵与该3 x 2矩阵相加,使得两个矩阵的shape能够匹配; 矩阵乘法   矩阵乘法与矩阵加法规则并不一样

Strassen算法及其python实现

倖福魔咒の 提交于 2019-11-30 04:22:51
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p。 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了:      下面咱们来具体解决这个矩阵相乘的问题。 解法一、暴力解法 其实,通过前面的分析,我们已经很明显的看出,两个具有相同维数的矩阵相乘,其复杂度为O(n^3),参考代码如下: 1 //矩阵乘法,3个for循环搞定 2 void Mul(int** matrixA, int** matrixB, int** matrixC) 3 { 4 for(int i = 0; i < 2; ++i) 5 { 6 for(int j = 0; j < 2; ++j) 7 { 8 matrixC[i][j] = 0; 9 for(int k = 0; k < 2; ++k) 10 { 11 matrixC[i][j] += matrixA[i][k] * matrixB[k][j]; 12 } 13 } 14 } 15 } 解法二、Strassen算法 在解法一中