-
2019-02-09 13:55:54
python 矩阵乘法
python 矩阵有两种形式:array 和 matrix 对象(它们的区别在这里就不说了),下面介绍相关乘法
1. np.multiply
对 array 和 matrix 对象的操作相同
(1) a 和 b 维度相同
都是每行对应元素相乘(即对应内积的第一步,不求和)>>> a = np.array([[1,2],[1,2]]) >>> a*a >>> array([[1, 4], [1, 4]])
(2)对于两个矩阵元素 a 和 b 维度不一的情况(array 和 matrix 对象都适用),则需将相应的行和列进行扩充,需要扩充的行或列的维度必须为 1。
对列扩充则补 1, 对行扩充则将第一行复制到每一行。比如,a:3 * 1, b: 1 * 2,则 a 扩充为 3 * 2,b 扩充为 3 * 2。
如下所示:>>> a = np.array([[1],[1],[1]]) >>> b = np.array([1,2]) >>> np.multiply(a, b) >>> array([[1, 2], [1, 2], [1, 2]])
(3)a 和 b为标量:则标量直接相乘
2. *
(1)对于 matrix 对象,代表矩阵乘法(维度必须满足相应规则);
(2)对于array对象,则是每行对应元素相乘。当 array 对象的 shape 不同时(matrix 对象不行) ,其规则和 np.multiply 一样;3. np.matmul
该函数对 array 和 matrix 对象的操作是不一样的。
(1)对于 matrix 对象,对应矩阵乘法,对象维度必须满足矩阵乘法规则。
(2)对于 array 对象,对应内积,但对象维度必须相同,不支持维度扩展。
(3)不支持标量运算。在array 中,与 multiply 一样,每行对应元素相乘
4. np.dot
对于matrix 对象,对应矩阵乘法。
对于两个 array 类型的元素:a,b,有如下可能:
(1)a 和 b 都是一维 array,那么 dot 就是它们的内积(点乘);
(2)a 和 b 都是二维 array,那么 dot 就是它们的矩阵乘积(即按矩阵乘法规则来计算),也可以用 matmul 或 a @ b;
(3)如果a 和 b 都是标量(scalar),那么 dot 就是两个数的乘积,也可以用 multiply 或 a * b;
(4)若 a:N * D,b:1 * D,那么 dot 为 a 的每一行和 b (只有一行)的 内积;>>>a = np.array([[1,2], [3, 4]]) >>>b = np.array([1, 2]) >>>np.dot(a, b) >>>array([ 5, 11])
以上的总结并不完善,如果有错欢迎指出,谢谢。
更多相关内容 -
python矩阵乘法
2021-04-30 16:03:06python中矩阵乘法,可以通过 NumPy 的np.dot()函数计算(乘积也称为点积)。 np.dot()接收两个NumPy数组作为参数,并返回数组的乘积。类似于数学中的两个矩阵相乘,A中每行的元素值与B中每列的元素值对应相乘再求和...原理:
python中矩阵乘法,可以通过 NumPy 的np.dot()函数计算(乘积也称为点积)。
np.dot()接收两个NumPy数组作为参数,并返回数组的乘积。类似于数学中的两个矩阵相乘,A中每行的元素值与B中每列的元素值对应相乘再求和,得到结果矩阵中一个元素值。
其中A的维度为:(m,n),B的维度为:(n,c),则A,B相乘以后得到的矩阵C的维度为:(m,c)。注意:
1. A的列和B的行的维度必须保持一致,否则会报错。
2. np.dot(A, B)和np.dot(B, A)的值可能不一样,操作数(A、 B)的顺序不同,结果也会不同。
python实现两个矩阵相乘:
import numpy as np A = np.array([[1, 3, 5], [2, 4, 6]]) print("A.shape=", A.shape) # 通过.shape可查看A的形状特征 B = np.array([[1, 1], [2, 2], [3, 3]]) print("B.shape=", B.shape) C = np.dot(A, B) print("C.shape=", C.shape,) print("C=", C)
运行结果:
-
python矩阵乘法小程序
2018-12-04 10:49:10矩阵乘法用途广泛。该程序为本人编写。附有测试代码。请大家批评指正。 -
python矩阵乘法运算
2022-07-21 21:00:04一、矩阵乘法 矩阵乘法为 A@B 或 np.dot(A,B) ,若为对应元素相乘则用 A*B 或 np.multiply(A,B) 。 1. A@B 和 np.dot(A,B) A = np.array([ [1,2], [3,4] ]) B = np.array([ [1,2], [3,4] ]) C1 = A @ B C2 = np.dot...一、矩阵乘法
矩阵乘法为 A@B 或 np.dot(A,B) ,若为对应元素相乘则用 A*B 或 np.multiply(A,B) 。
1. A@B 和 np.dot(A,B)
A = np.array([ [1,2], [3,4] ]) B = np.array([ [1,2], [3,4] ]) C1 = A @ B C2 = np.dot(A,B) print(C1) print('---------') print(C2)
输出为
[[ 7 10] [15 22]] --------- [[ 7 10] [15 22]]
2. A*B 或 np.multiply(A,B)
A = np.array([ [1,2], [3,4] ]) B = np.array([ [1,2], [3,4] ]) C3 = A*B C4 = np.multiply(A,B) print(C3) print('---------') print(C4)
输出为
[[ 1 4] [ 9 16]] --------- [[ 1 4] [ 9 16]]
二、邻接矩阵的相乘的意义
1.定义
假设存在一个N个节点的无向图。我们用 G[u][v] = G[v][u] = 1 表示从点 u 到点 v 有连边,否则 G[u][v] = G[v][u] = 0。
2.问题
如果用这个图的邻接矩阵进行自乘会得到什么呢?
3.理解
模拟矩阵的运算有 G 2 [ u ] [ v ] = ∑ i = 1 n G [ u ] [ G^{2}[u][v] = {\textstyle \sum_{i=1}^{n}} G[u][ G2[u][v]=∑i=1nG[u][i ] ∗ G [ ]* G[ ]∗G[i ] [ v ] ][v] ][v]。也就是说 G 2 [ u ] [ v ] G^{2}[u][v] G2[u][v] 是图上点 u 到点 v 恰好经过两条边的路径的条数的矩阵。
具体的解释为
我们可以把原始邻接矩阵 G [ u ] [ v ] G[u][v] G[u][v] 看作为表示图上 u 到 v 恰好经过一条边的路径条数的矩阵。
那么 G 2 [ u ] [ v ] = ∑ i = 1 n G [ u ] [ G^{2}[u][v] = {\textstyle \sum_{i=1}^{n}} G[u][ G2[u][v]=∑i=1nG[u][i ] ∗ G [ ]* G[ ]∗G[i ] [ v ] ][v] ][v] 显然就是运用了乘法原理与加法原理。类似的, G 3 [ u ] [ v ] G^{3}[u][v] G3[u][v] 表示什么意思呢?
由 G 3 G^{3} G3 的计算过程 G 3 [ u ] [ v ] = ∑ i = 1 n G [ u ] [ G^{3}[u][v] = {\textstyle \sum_{i=1}^{n}} G[u][ G3[u][v]=∑i=1nG[u][i ] ∗ G [ ]* G[ ]∗G[i ] [ ][ ][j ] ∗ G [ ]*G[ ]∗G[j ] [ v ] ][v] ][v] 。同理可知其表示为 图上点 u 到点 v 恰好经过三条边的路径的条数 的矩阵。或者我们也可以将其看作 G 3 = G 2 ∗ G G^{3}=G^{2}*G G3=G2∗G,其本质是相同的。由上述不难发现该性质对于一般的正整数 k 都是成立的。即 G K [ u ] [ v ] G^{K}[u][v] GK[u][v] 表示图上 u 到 v 恰好经过k条边的路径条数的矩阵。也就是说如果需要在某个图上求 u 到 v 恰好经过 K 条边的路径的条数,我们完全可以使用矩阵快速幂来优化这个计算过程。
4.代码实现
邻接矩阵如下
代码如下import torch # 构建邻接矩阵 a = [ [0,1,1,1], [1,0,0,1], [1,0,0,1], [1,1,1,0] ] A = torch.tensor(a) A = torch.mm(A,A) print(A)
输出结果如下
tensor([[3, 1, 1, 2], [1, 2, 2, 1], [1, 2, 2, 1], [2, 1, 1, 3]])
-
Python 矩阵乘法的代码实现
2022-03-13 15:38:20Python 矩阵乘法的代码实现求矩阵A*B,得到的结果C
得到矩阵C
A=[[1,1,1],[2,2,2],[3,3,3]] B=[[1,0,0],[0,1,0],[0,0,1]] c=[[0,0,0],[0,0,0],[0,0,0]] for i in range(3): for j in range(3): for k in range(3): c[i][j] += A[i][k]*B[k][j]
输出矩阵C
for i in range(3): for j in range(3): if (j+1)%3 == 0 and (i+1)%3 != 0: print(c[i][j],end=' ') print() continue print(c[i][j],end=' ')
-
python矩阵乘法基础小结
2022-02-18 15:21:33Python的numpy矩阵乘法相关: 1.直接对array之间使用表示进行点乘,维度较低的array_x1最高纬度(设为n维)的数字,必须与纬度较高array_x2对应维度上的数字相同。x1和x2第i维度(i>n)的数字要不然相同,要不然... -
PYTHON矩阵乘法.zip
2021-04-14 19:57:45python实现矩阵乘法,适合初学者 -
python矩阵乘法_Python矩阵乘法
2020-09-14 16:12:34python矩阵乘法Here you will get program for python matrix multiplication. 在这里,您将获得用于python矩阵乘法的程序。 If we want to multiple two matrices then it should satisfy one condition. We need... -
python矩阵乘法函数实现
2020-04-25 14:34:24#矩阵乘法 import numpy as np a=np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]],float) b=np.array([[0,1],[2,3],[4,5]],float) def fun(a,b): m,n,o=len(a),len(b[0]),len(b) #len(b[0]):b的列数 #len(b) :b的... -
Python矩阵乘法在矩阵维数不一致的自动扩展
2020-03-26 16:16:48Python矩阵乘法在矩阵维数不一致的自动扩展(具体参见broadcast) - 对应元素相乘(a*b) 如下代码中,a为2*3矩阵,b为1*3矩阵,两者维数不同,进行对应元素相乘时需要先扩展a或b(也可能两者都要扩展) 扩展方法是... -
python稀疏矩阵乘法
2018-12-04 10:51:27稀疏矩阵是机器学习中的重要工具。本代码为自己编写。初学者,希望大家批评指正。 -
python实现矩阵乘法的方法
2020-09-21 22:37:53主要介绍了python实现矩阵乘法的方法,实例分析了Python矩阵操作的相关技巧,需要的朋友可以参考下 -
Python Numpy矩阵乘法
2020-09-15 18:41:23In this tutorial we will see python matrix multiplication using numpy ... 在本教程中,我们将看到使用numpy(Numerical Python)库的python矩阵乘法 。 For using numpy you must install it first on your... -
Python中的几种矩阵乘法(小结)
2020-09-19 02:50:44主要介绍了Python中的几种矩阵乘法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Python实现矩阵乘法
2022-04-08 20:54:45 问题 矩阵相信大家都知道,是线性代数中的知识,就是一系列数集。顾名思义,数字组成的矩形,例如: [1 2 3 4 5 67 8 9 1011 ] 现在,我们需要用python...矩阵乘法原理 要做矩阵的乘法,首先得搞清楚几点关于矩阵乘 -
python矩阵运算(矩阵乘法)
2021-04-18 00:01:20矩阵运算,矩阵乘法,矩阵转秩 -
纯python进行矩阵的相乘运算的方法示例
2020-12-31 18:26:34本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) # 获取B的行数和列数 B_row, B_col = shape(B) # 不能... -
python:矩阵乘法
2022-02-06 10:49:36计算两个矩阵的乘法。n*m阶的矩阵A乘以m*k阶的矩阵B得到的矩阵C 是n*k阶的,且C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1][j](C[i][j]表示C矩阵中第i行第j列元素)。 输入 第一行为n, m... -
关于python中的矩阵乘法(array和mat类型)
2020-12-10 05:41:24一、关于python中的矩阵乘法,我们一般有两种数据格式可以实现:np.array()类型和np.mat()类型;对于这两种数据类型均有三种操作方式:(1)乘号 *(2)np.dot()(3)np.multiply()而这三种操作方式在操作这两种数据格式时...