矩阵的基本运算(相乘、相加、求逆、转置)

python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包。

from numpy import * ; #导入numpy的库函数
import numpy as np; #这个方式使用numpy的函数时,需要以np.开头。

1. 矩阵相乘
矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数。
输入:

import numpy as np
data = np.mat([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data1 = np.mat([[2, 3], [4, 5], [6, 7]])
print(data*data1)

结果:一个3x3的矩阵乘以3x2的矩阵,为一个3x2的矩阵

[[ 46  57]
 [ 86 106]
 [ 34  42]]

还可以用dot(A,B)函数,这个函数执行的是严格的矩阵乘法

data = np.array([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data1 = np.array([[2, 3], [4, 5], [6, 7]])
print(np.dot(data, data1))

结果:

[[ 46  57]
 [ 86 106]
 [ 34  42]]

2. 实现对应元素相乘
各个矩阵对应元素做乘法,若 A 为 m * n 的矩阵,B 为 m * n 的矩阵,得到一个 m*n 的矩阵。

data = np.mat([[3, 4], [4, 9], [2, 3]])
data1 = np.mat([[2, 3], [4, 5], [6, 7]])
print(np.multiply(data,data1))

结果:

[[ 6 12]
 [16 45]
 [12 21]]

3.矩阵相加
矩阵行数和列数要相同(同型)

data = np.mat([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data_2 = np.mat([[2, 4, 4], [4, 4, 7], [2, 5, 3]])
print(data+data_2)

4.矩阵求逆
矩阵A可逆的充分必要条件是|A|≠0,Singular matrix奇异矩阵不可求逆。

import numpy as np
data3 = np.mat([[3, 4], [4, 5]])
print(np.linalg.inv(data3)) #data3.I,矩阵对象可以通过 .I 求逆

若通过array初始化一个矩阵,用 .I 求逆将出错,可使用matirx转化后再求逆。

import numpy as np
data3 = np.array([[3, 4], [4, 5]])
print(data3.I)
AttributeError: 'numpy.ndarray' object has no attribute 'I'

对一个奇异矩阵求逆将出错

A = np.zeros((4, 4))
A[0, -1] = 1
A[-1, 0] = -1
B=np.matrix(A) # 使用.I求逆先用matrix转化
print(B.I)

numpy.linalg.LinAlgError: Singular matrix
由于奇异矩阵或非方阵的矩阵不存在逆矩阵,但可以用函数pinv(A)求其伪逆矩阵。伪逆矩阵是逆矩阵的广义形式。函数返回一个与A的转置矩阵A’ 同型的矩阵。

A = np.zeros((3, 4))
A[0, -1] = 1
A[-1, 0] = -1
print(np.linalg.pinv(A))

结果:

[[ 0.  0. -1.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 1.  0.  0.]]

5.矩阵的转置

A = np.mat([[2, 3, 1],
         [6, 7, 8]])
print(A.T)

输出:

[[2 6]
 [3 7]
 [1 8]]
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是 C++ 中实现矩阵加减乘除、逆运算转置运算基本代码: ``` #include <iostream> #include <vector> using namespace std; // 定义矩阵数据类型 typedef vector<vector<double>> Matrix; // 矩阵加法 Matrix matrixAddition(Matrix A, Matrix B) { int m = A.size(), n = A[0].size(); Matrix C(m, vector<double>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = A[i][j] + B[i][j]; } } return C; } // 矩阵减法 Matrix matrixSubtraction(Matrix A, Matrix B) { int m = A.size(), n = A[0].size(); Matrix C(m, vector<double>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = A[i][j] - B[i][j]; } } return C; } // 矩阵乘法 Matrix matrixMultiplication(Matrix A, Matrix B) { int m = A.size(), n = A[0].size(), l = B[0].size(); Matrix C(m, vector<double>(l)); for (int i = 0; i < m; i++) { for (int j = 0; j < l; j++) { for (int k = 0; k < n; k++) { C[i][j] += A[i][k] * B[k][j]; } } } return C; } // 矩阵除法 Matrix matrixDivision(Matrix A, Matrix B) { int m = A.size(), n = A[0].size(); Matrix C(m, vector<double>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = A[i][j] / B[i][j]; } } return C; } // 矩阵运算 Matrix matrixInverse(Matrix A) { int n = A.size(); Matrix B(n, vector<double>(n, 0)); for (int i = 0; i < n; i++) { B[i][i] = 1; } for (int i = 0; i < n; i++) { double pivot = A[i][i]; if (pivot == 0) { cout << "Matrix is not invertible" << endl; return A; } for (int j = 0; j < n; j++) { A[i][j] /= pivot; B[i][j] /= pivot; } for (int j = 0; j < n; j++) { if (i != j) { double factor = A[j][i]; for (int k = 0; k < n; k++) { A[j][k] -= factor * A[i][k]; B[j][k] -= factor * B[i][k]; } } } } return B; } // 矩阵转置 Matrix matrixTranspose(Matrix A) { int m = A.size(), n = A[0].size(); Matrix B(n, vector<double>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { B[i][j] = A[j][i]; } } return B; } int main() { // 定义两个矩阵 Matrix A = {{1, 2}, {3, 4}}; Matrix B = {{5, 6}, {7, 8}}; // 矩阵加减法 Matrix C = matrixAddition(A, B); Matrix D = matrixSubtraction(A, B); cout << "Matrix addition result:" << endl; for (auto row : C) { for (auto elem : row) { cout << elem << " "; } cout << endl; } cout << "Matrix subtraction result:" << endl; for (auto row : D) { for (auto elem : row) { cout << elem << " "; } cout << endl; } // 矩阵乘法 Matrix E = matrixMultiplication(A, B); cout << "Matrix multiplication result:" << endl; for (auto row : E) { for (auto elem : row) { cout << elem << " "; } cout << endl; } // 矩阵除法 Matrix F = matrixDivision(A, B); cout << "Matrix division result:" << endl; for (auto row : F) { for (auto elem : row) { cout << elem << " "; } cout << endl; } // 矩阵运算 Matrix G = matrixInverse(A); cout << "Matrix inverse result:" << endl; for (auto row : G) { for (auto elem : row) { cout << elem << " "; } cout << endl; } // 矩阵转置 Matrix H = matrixTranspose(A); cout << "Matrix transpose result:" << endl; for (auto row : H) { for (auto elem : row) { cout << elem << " "; } cout << endl; } return 0; } ``` 以上代码实现了矩阵加减乘除、逆运算转置运算,并在主函数中进行了示例操作。可以根据自己的需求进行修改和扩展。需要注意的是,在进行矩阵运算时,要先判断矩阵是否可逆,如果不可逆则直接返回原矩阵。 ### 回答2: 矩阵运算是指对矩阵进行加减乘除等基本运算的过程。 加法:两个矩阵进行加法运算时,要求这两个矩阵的行数和列数都相同,相同位置的元素相加得到结果矩阵。 减法:两个矩阵进行减法运算时,同样要求行数和列数相同,相同位置的元素相减得到结果矩阵。 乘法:矩阵乘法是指两个矩阵进行乘法运算,其中一个矩阵的列数要等于另一个矩阵的行数,得到的结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数。 除法:矩阵除法是指通过矩阵的逆来实现除法运算。要求被除矩阵为方阵,且其逆矩阵存在。将除矩阵与逆矩阵相乘,得到结果矩阵。 逆运算矩阵的逆是指满足逆矩阵性质的矩阵。对于一个方阵A,如果存在一个矩阵B,使得A与B的乘积为单位矩阵,即AB=BA=I,那么矩阵B就是矩阵A的逆矩阵转置运算矩阵转置是指将矩阵的行与列互换得到的新矩阵。即A的转置矩阵为A的列变成行,行变成列。如果矩阵A的大小为m x n,则其转置矩阵为n x m。 ### 回答3: 矩阵是数学中的一种重要的数学工具,矩阵运算是指对矩阵进行加减乘除、逆运算转置运算矩阵加法是指将两个相同大小的矩阵对应位置上的元素进行相加,得到一个新的矩阵。例如,对于两个3×3矩阵A和B,它们的和矩阵C可以通过将A和B对应位置上的元素相加得到。 矩阵减法是指将两个相同大小的矩阵对应位置上的元素进行相减,得到一个新的矩阵。和矩阵加法类似,对于两个3×3矩阵A和B,它们的差矩阵C可以通过将A和B对应位置上的元素相减得到。 矩阵乘法是指将一个矩阵的行与另一个矩阵的列进行乘法运算,得到一个新的矩阵。例如,对于一个3×2的矩阵A和一个2×4的矩阵B,它们的乘积矩阵C可以通过将A的每一行与B的每一列进行乘法运算,然后将结果相加得到。 矩阵的逆运算是指对一个可逆的方阵进行操作,得到一个新的方阵。如果一个矩阵A有逆矩阵B,那么矩阵A乘以矩阵B的结果是单位矩阵。逆矩阵可以通过高斯-约当消元法等方法求解。 矩阵转置是指将矩阵的行和列对换,得到一个新的矩阵。例如,对于一个3×2的矩阵A,它的转置矩阵B可以通过将A的行换成列,A的列换成行得到。 总结来说,矩阵运算包括矩阵加法、减法、乘法、逆运算转置运算。它们在数学和工程领域中有着广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值