首页 > 其他分享 >numpy-线代和矩阵

numpy-线代和矩阵

时间:2023-07-30 18:25:11浏览次数:41  
标签:线代 矩阵 print np import numpy matlib

numpy-线代和矩阵

目录

创建(转换)矩阵

一般我们先创建数组,然后将其转化为矩阵

np.mat(data, dtype=None)
data:  数据或者数组
dtype: 数据格式
import numpy as np

arr1 = np.array(
    [[1, 2, 3],
    [4, 5, 6],
     [7, 8, 9]]
)
print(type(arr1))
a = np.mat(arr1)
print(type(a))

矩阵运算

函数 说明
点积 np.dot(a,b) 求解两个数组的点积
点积 np.vdot(a,b) 求解两个向量的点积
内积 np.inner(a,b) 求解两个数组的内积
外积 np.outer(a,b) 求解两个向量的外积
矩阵积 np.matmul(a,b) 求解两个数组的矩阵乘积
np.tensordot(a,b) 求解张量点积
np.kron(a,b) 计算 Kronecker 乘积

numpy.dot(a,b) 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为向量点积)

对于多维数组,则是计算每个元素相关的

import numpy.matlib
import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.dot(a,b))

[[37  40]
 [85  92]]
计算式为 [[1*11+2*13,1*12+2*14],[3*11+4*13,3*12+4*14]]
import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])

# vdot 将数组展开计算内积
print (np.vdot(a,b))
130
计算式为 1*11+2*12+3*13+4*14 = 130

numpy.inner(a,b) 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。

import numpy as np

print (np.inner(np.array([1,2,3]),np.array([0,1,0])))
# 2
# 等价于 1*0+2*1+3*0
import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[11, 12], [13, 14]])

print(b)

print(np.inner(a, b))
[[35 41]
 [81 95]]
计算公式
1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14

numpy.matmul(a,b) 函数返回两个数组的矩阵乘积。

import numpy.matlib
import numpy as np

a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print (np.matmul(a,b))

[[4  1]
 [2  2]]

np.linalg线代函数库

函数 说明
np.linalg.multi_dot() 矩阵相乘
np.linalg.matrix_power(data, n) 矩阵幂运算
np.linalg.cholesky(np.matrix(A)) 矩阵相乘
np.linalg.qr(mat1) qr分解
p.linalg.svd(a) 奇异值分解
np.linalg.eig(mat1) 计算一个方阵的特征值和右特征向量
np.linalg.eigh(a, UPLO=‘L’) 复厄米特矩阵的特征值和特征向量

涉及计算线性方程组、矩阵分解、矩阵计算、矩阵求逆、广义逆矩阵等

参考资料 https://www.python100.com/html/89577.html

multi_dot(矩阵相乘) 计算单个函数调用中两个或多个数组的点积,自动选择最快的评估顺序。

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])

mat2 = np.mat(
    [
        [11,12, 13],
        [14, 15, 16],
        [17, 18, 19],
    ])

# 点积
print(np.linalg.multi_dot([mat1, mat2]))

[[ 90  96 102]
 [216 231 246]
 [342 366 390]]

np.linalg.matrix_power(data, n) 取一个方阵的(整数)n次方

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])

mat2 = np.mat(
    [
        [11,12, 13],
        [14, 15, 16],
        [17, 18, 19],
    ])

# 求矩阵幂
print(np.linalg.matrix_power(mat1, 3))

[[ 468  576  684]
 [1062 1305 1548]
 [1656 2034 2412]]

np.matlib矩阵函数库

函数 说明
numpy.matlib.empty() 返回一个新的矩阵
zeros numpy.matlib.zeros() 创建一个以 0 填充的矩阵
ones numpy.matlib.ones() 创建一个以 1 填充的矩阵
eye numpy.matlib.eye() 返回一个矩阵,对角线元素为 1,其他位置为零
identity numpy.matlib.identity() 返回给定大小的单位矩阵
rand numpy.matlib.rand() 创建一个给定大小的矩阵,数据是随机填充的

numpy.matlib.zeros()函数创建一个以 0 填充的矩阵。

import numpy.matlib
import numpy as np

print (np.matlib.zeros((2,2)))


# 输出结果为:
[[0. 0.]
 [0.0.]]

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。

numpy.matlib.eye(n, M,k, dtype)

n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
import numpy.matlib 
import numpy as np 

print (np.matlib.eye(n =  3, M =  4, k =  0, dtype =  float))

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

import numpy.matlib 
import numpy as np 

print (np.matlib.ones((2,2)))


[[1. 1.]
 [1. 1.]]

numpy.matlib.identity() 函数返回给定大小的单位矩阵。

import numpy.matlib 
import numpy as np 

# 大小为 5,类型位浮点型
print (np.matlib.identity(5, dtype =  float))

# 执行结果
[[ 1.  0.  0.  0.  0.] 
 [ 0.  1.  0.  0.  0.] 
 [ 0.  0.  1.  0.  0.] 
 [ 0.  0.  0.  1.  0.] 
 [ 0.  0.  0.  0.  1.]]

参考资料

https://zhuanlan.zhihu.com/p/609111535

https://geek-docs.com/numpy/numpy-tutorials/numpy-matrix.html

标签:线代,矩阵,print,np,import,numpy,matlib
From: https://www.cnblogs.com/tian777/p/17591778.html

相关文章

  • 秩为 1 的矩阵特有的性质
    特征值为:任意两行或两列都成比例秩为1的矩阵一定可以相似对角化上述定理的详细解释:秩为1的矩阵的一些性质|荒原之梦考研网(公益)......
  • 【矩阵论】含hadamard积求导和优化问题
    本篇使用的符号说明,考虑优化问题\[\min\limits_X\|A\circX-B\|_F^2,\tag{1}\]其中\(A,X,B\inM_{m,n}\)。自然的想法是对其求导找闭式解,由于\(F\)-范数的平方可以看作对每个位置的平方求和,于是\((1)\)可以向量化写成以下形式,\[\min\limits_X\|\operatorname{vec}(A)\odot\o......
  • 软件测试|Python科学计算神器numpy教程(十)
    numpy字符串处理简介NumPy是一个功能强大的Python库,主要用于科学计算和数据处理。除了处理数值数据外,NumPy还提供了一些强大的字符串处理功能。本文将介绍NumPy中常用的字符串处理函数,包括字符串拼接、切片、查找、替换等操作,展示NumPy在字符串处理方面的优势。字符串拼接NumPy提供......
  • 软件测试|Python科学计算神器numpy教程(十一)
    NumPy数学函数:强大的数值计算工具简介NumPy是Python中广受欢迎的科学计算库,提供了丰富的数学函数,可用于处理数组和矩阵中的数值数据。这些数学函数包含了许多常见的数学运算,如三角函数、指数函数、对数函数、统计函数等。本文将介绍NumPy中一些常用的数学函数及其用法,展示NumPy在数......
  • 讲一讲numpy中的*号的一个作用
    举例>>>shape=(2,2)>>>np.random.randn(*shape)array([[-1.64633649,-0.03132273],[-0.92331459,1.05325462]])这不是NumPy特定的语法,而是Python语法。所谓的*-操作符是在参数列表中进行序列解包本例中的用法是将shape元组解压为单独的参数。这是必需的,因为numpy.ran......
  • numpy中的切片中的None含义
    pytorch的tensor同理。先说结论:None实际上是增加了一个维度,它不是原维度的索引。为什么引入None说一下我找原文档的心路历程:在numpy的官方文档里搜索“slice”,也就是切片,很容易就能找到关于slice的介绍:BasicslicingextendsPython’sbasicconceptofslicingtoNdime......
  • 代码随想录算法训练营第二天| LeetCode 977.有序数组的平方 ,209.长度最小的子数组 ,59.
    977.有序数组的平方     题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/    文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html    视频讲解: https://www.bili......
  • HJ70 矩阵乘法计算量估算
    1.题目读题HJ70 矩阵乘法计算量估算  考查点 2.解法思路 代码逻辑 具体实现 3.总结......
  • HJ69 矩阵乘法
    1.题目读题 HJ69 矩阵乘法 考查点 首先,你需要了解矩阵乘法的定义和运算规则。矩阵乘法是一种将两个矩阵相乘的运算,得到一个新的矩阵。矩阵乘法的基本要求是,左边矩阵的列数必须等于右边矩阵的行数,否则无法进行乘法。矩阵乘法的结果是一个新的矩阵,其行数等于左边矩阵......
  • numpy.tile()函数用法
    >>>importnumpy>>>numpy.tile([0,0],5)#在列方向上重复[0,0]5次,默认行1次array([0,0,0,0,0,0,0,0,0,0])>>>numpy.tile([0,0],(1,1))#在列方向上重复[0,0]1次,行1次array([[0,0]])>>>numpy.tile([0,0],(2,1))#在列方向上重复[0,0]1次,行2次array([[0......