矩阵运算

简介: 矩阵运算

1.利用列表推导式写矩阵乘法


一般的矩阵乘法根据公式,可以由三重循环写出,请将其改写为列表推导式的形式。

M1 = np.random.rand(2,3)
M2 = np.random.rand(3,4)
res = np.empty((M1.shape[0],M2.shape[1]))
for i in range(M1.shape[0]):
    for j in range(M2.shape[1]):
        item = 0
        for k in range(M1.shape[1]):
            item += M1[i][k] * M2[k][j]
        res[i][j] = item
(np.abs((M1@M2 - res) < 1e-15)).all() # 排除数值误差
True


2.更新矩阵


设矩阵 A_{m×n} ,现在对 A 中的每一个元素进行更新生成矩阵 B ,更新方法是 B_{ij}=A_{ij}\sum_{k=1}^n\frac{1}{A_{ik}} ,例如下面的矩阵为 A ,则 B_{2,2}=5\times(\frac{1}{4}+\frac{1}{5}+\frac{1}{6})=\frac{37}{12} ,请利用 Numpy 高效实现。\begin{split}A=\left[ \begin{matrix} 1 & 2 &3\4&5&6\7&8&9 \end{matrix} \right]\end{split}


3.卡方统计量


设矩阵A_{m\times n},记B_{ij} = \frac{(\sum_{i=1}^mA_{ij})\times (\sum_{j=1}^nA_{ij})}{\sum_{i=1}^m\sum_{j=1}^nA_{ij}},定义卡方值如下: $$\chi^2 = \sum_{i=1}^m\sum_{j=1}^n\frac{(A_{ij}-B_{ij})^2}{B_{ij}}请利用‘Numpy‘对给定的矩阵A计算χ2 请利用`Numpy`对给定的矩阵A计算\chi^2NumpyAχ2

np.random.seed(0)
A = np.random.randint(10, 20, (8, 5))


4.改进矩阵计算的性能


设Z为m×n的矩阵,B和U分别是m×p和p×n的矩阵,B_i为B的第i行,U_j为U的第j列,下面定义\displaystyle R=\sum_{i=1}^m\sum_{j=1}^n|B_i-U_j|2^2Z{ij},其中|\mathbf{a}|_2^2表示向量a的分量平方和\sum_i a_i^2。

现有某人根据如下给定的样例数据计算R的值,请充分利用Numpy中的函数,基于此问题改进这段代码的性能。

np.random.seed(0)
m, n, p = 100, 80, 50
B = np.random.randint(0, 2, (m, p))
U = np.random.randint(0, 2, (p, n))
Z = np.random.randint(0, 2, (m, n))
def solution(B=B, U=U, Z=Z):
    L_res = []
    for i in range(m):
        for j in range(n):
            norm_value = ((B[i]-U[:,j])**2).sum()
            L_res.append(norm_value*Z[i][j])
    return sum(L_res)
solution(B, U, Z
100566


5.连续整数的最大长度


输入一个整数的Numpy数组,返回其中严格递增连续整数子数组的最大长度,正向是指递增方向。例如,输入[1,2,5,6,7],[5,6,7]为具有最大长度的连续整数子数组,因此输出3;输入[3,2,1,2,3,4,6],[1,2,3,4]为具有最大长度的连续整数子数组,因此输出4。请充分利用Numpy的内置函数完成。(提示:考虑使用nonzero, diff函数)


目录
相关文章
|
1月前
线性代数介绍和矩阵运算
线性代数介绍和矩阵运算
|
10天前
|
机器学习/深度学习 算法 搜索推荐
SciPy线性代数库详解:矩阵运算与方程求解
【4月更文挑战第17天】SciPy的`scipy.linalg`模块提供丰富的线性代数功能,包括矩阵运算、线性方程组求解、特征值问题和奇异值分解等,基于BLAS和LAPACK库确保效率与稳定性。关键操作如矩阵乘法使用`dot`函数,转置和共轭转置用`transpose`和`conj`,求解线性方程组有`solve`和迭代方法,计算特征值和向量用`eig`,奇异值分解则依赖`svd`。这个库对科学计算、数据分析和机器学习等领域至关重要。
|
10天前
|
机器学习/深度学习 数据挖掘 Python
线性代数运算在NumPy中的实现
【4月更文挑战第17天】本文介绍了NumPy在Python中实现线性代数运算的方法,包括使用`ndarray`创建向量和矩阵,矩阵的转置,矩阵乘法,计算特征值和特征向量,解线性方程组,以及计算行列式和逆矩阵。通过NumPy,科学家和数据分析师能更高效地进行科学计算和数据分析。
|
5月前
|
数据安全/隐私保护 C++
矩阵乘法和组合计数
矩阵乘法和组合计数
43 0
|
5月前
|
C++
线性同余方程和矩阵乘法
线性同余方程和矩阵乘法
29 0
|
10月前
|
存储 C++
OpenBLAS 中矩阵运算函数学习
OpenBLAS 中矩阵运算函数学习
328 0
|
10月前
|
算法
线性代数(二)矩阵代数
线性代数(二)矩阵代数
73 0
|
机器学习/深度学习 算法 图形学
矩阵和线性代数的应用
矩阵和线性代数是数学中重要的概念,它们被广泛应用于物理、工程、计算机科学、经济学等众多领域。本文将讨论矩阵和线性代数的一些基本概念以及它们在实际应用中的重要性和影响。
229 0
|
机器学习/深度学习 数据挖掘 PyTorch
PyTorch: 张量的变换、数学运算及线性回归
PyTorch: 张量的变换、数学运算及线性回归
83 0
PyTorch: 张量的变换、数学运算及线性回归
|
机器学习/深度学习 存储 算法
矩阵运算|学习笔记
快速学习 矩阵运算
105 0