实验3 矩阵与运算 1、使用mat函数创建一个2*3矩阵: 2、使用 shape 可以获取矩阵的大小 3、使用mat函数创建一个3*2矩阵,并与1创建的矩阵相乘,然后求该3*3矩阵对角元素之和 4、再创建一个2*3矩阵,并与1创建的矩阵点乘
时间: 2023-06-06 17:06:45 浏览: 116
1、可以使用以下代码创建一个 2*3 的矩阵:
matrix1 = np.mat([[1, 2, 3], [4, 5, 6]])
2、可以使用以下代码获取矩阵的大小:
matrix1.shape
该代码将返回一个元组,其中第一个值表示矩阵的行数,第二个值表示矩阵的列数。
3、可以使用以下代码创建一个 3*2 的矩阵,并与 1 创建的矩阵相乘,然后求该 3*3 矩阵对角元素之和:
matrix2 = np.mat([[7, 8], [9, 10], [11, 12]])
matrix3 = matrix1 * matrix2
sum = 0
for i in range(3):
sum += matrix3[i, i]
print(sum)
该代码将输出矩阵 matrix3 对角元素之和。
4、可以使用以下代码创建一个 2*3 的矩阵,并与 1 创建的矩阵进行点乘:
matrix4 = np.mat([[13, 14, 15], [16, 17, 18]])
matrix5 = np.multiply(matrix1, matrix4)
该代码将生成一个新的矩阵 matrix5,其中每个元素都是对应位置上两个矩阵元素的积。
相关问题
优化这段代码import numpy as np class SFA: # slow feature analysis class def __init__(self): self._Z = [] self._B = [] self._eigenVector = [] def getB(self, data): self._B = np.matrix(data.T.dot(data)) / (data.shape[0] - 1) def getZ(self, data): derivativeData = self.makeDiff(data) self._Z = np.matrix(derivativeData.T.dot(derivativeData)) / (derivativeData.shape[0] - 1) def makeDiff(self, data): diffData = np.mat(np.zeros((data.shape[0], data.shape[1]))) for i in range(data.shape[1] - 1): diffData[:, i] = data[:, i] - data[:, i + 1] diffData[:, -1] = data[:, -1] - data[:, 0] return np.mat(diffData) def fit_transform(self, data, threshold=1e-7, conponents=-1): if conponents == -1: conponents = data.shape[0] self.getB(data) U, s, V = np.linalg.svd(self._B) count = len(s) for i in range(len(s)): if s[i] ** (0.5) < threshold: count = i break s = s[0:count] s = s ** 0.5 S = (np.mat(np.diag(s))).I U = U[:, 0:count] whiten = S * U.T Z = (whiten * data.T).T self.getZ(Z) PT, O, P = np.linalg.svd(self._Z) self._eigenVector = P * whiten self._eigenVector = self._eigenVector[-1 * conponents:, :] return data.dot(self._eigenVector.T) def transfer(self, data): return data.dot(self._eigenVector.T)
这段代码可以进一步优化,具体如下:
1. 使用numpy的matmul函数代替dot函数,matmul函数可以更高效地进行矩阵乘法运算。
2. 将常数值的计算提前,避免在循环中重复计算,提高效率。
3. 使用numpy的einsum函数代替循环,einsum函数可以更高效地进行矩阵计算。
4. 使用Python中的列表推导式代替for循环,可以提高代码的简洁性和效率。
优化后的代码如下:
```python
import numpy as np
class SFA:
def __init__(self):
self._Z = []
self._B = []
self._eigenVector = []
def getB(self, data):
self._B = np.matmul(data.T, data) / (data.shape[0] - 1)
def getZ(self, data):
derivativeData = self.makeDiff(data)
self._Z = np.matmul(derivativeData.T, derivativeData) / (derivativeData.shape[0] - 1)
def makeDiff(self, data):
diffData = np.mat(np.zeros((data.shape[0], data.shape[1])))
diffData[:, :-1] = data[:, :-1] - data[:, 1:]
diffData[:, -1] = data[:, -1] - data[:, 0]
return np.mat(diffData)
def fit_transform(self, data, threshold=1e-7, conponents=-1):
if conponents == -1:
conponents = data.shape[0]
self.getB(data)
U, s, V = np.linalg.svd(self._B)
count = np.argmin(s ** 0.5 < threshold)
s = np.sqrt(s[:count])
S = np.linalg.inv(np.diag(s))
whiten = np.matmul(S, U[:, :count].T)
Z = np.matmul(whiten, data.T).T
self.getZ(Z)
PT, O, P = np.linalg.svd(self._Z)
self._eigenVector = np.matmul(P[-conponents:, :], whiten)
return np.matmul(data, self._eigenVector.T)
def transfer(self, data):
return np.matmul(data, self._eigenVector.T)
```
通过以上优化,可以提高代码的效率和简洁性。
python使用数组矩阵
Python中可以使用NumPy库来进行数组和矩阵的操作。以下是一些常见的使用方法:
1. 导入NumPy库:
```python
import numpy as np
```
2. 创建数组:
可以通过列表、元组等方式创建数组,也可以使用NumPy提供的函数来创建数组。
```python
# 通过列表创建一维数组
arr1 = np.array([1, 2, 3])
# 通过元组创建二维数组
arr2 = np.array(([[1, 2], [3, 4]]))
# 创建全0数组
arr3 = np.zeros((2, 3))
# 创建全1数组
arr4 = np.ones((3, 2))
# 创建指定范围内的随机数组
arr5 = np.random.randint(0, 10, size=(2, 3))
```
3. 数组的基本操作:
```python
# 访问数组元素
print(arr1[0])
print(arr2[1][0])
# 修改数组元素
arr1[0] = 5
arr2[1][0] = 6
# 数组的基本属性
print(arr1.shape)
print(arr2.ndim)
print(arr3.size)
# 数组的基本运算
print(arr1 + arr2)
print(arr1 * arr2)
print(np.dot(arr1, arr2))
```
4. 创建矩阵:
```python
# 创建矩阵
mat1 = np.matrix([[1, 2], [3, 4]])
mat2 = np.matrix('1 2; 3 4')
# 访问矩阵元素
print(mat1[0, 1])
# 矩阵的基本属性
print(mat1.shape)
print(mat2.size)
# 矩阵的基本运算
print(mat1 + mat2)
print(mat1 * mat2)
```
以上是一些常用的NumPy数组和矩阵操作,更多使用方法可以参考官方文档。
阅读全文