前言

熟练使用python计算向量、矩阵、数组之后,是不是就不用matlab了?应该不是,matlab的函数完善,而python我还不知道缺什么函数和功能。


基本操作

创建

import numpy as np
#创建行向量[1,2,3]
print(np.array([1,2,3]))#创建列向量[[1],[2],[3]]
print(np.array([[1],[2],[4]]))#创建矩阵
print(np.array([[1,2,3],[4,5,6],[7,8,9]]))#创建矩阵
print(np.mat([[1,2,3],[4,5,6],[7,8,9]])) #不推荐,因为大多数操作都是数组而不是矩阵数据结构mat#-------创建三维矩阵-------#创建1个2X3的0矩阵
print('>',np.zeros((1,2,3)))#创建两个2X2的0矩阵
print('>',np.zeros((2,2,2)))#创建两个3X3的1矩阵
print('>>>',np.ones((2,3,3)))#-----------------------from scipy import sparse
#创建稀疏矩阵
matrix =np.array([[0,0,0,1],[0,2,0,1],[1,0,3,0]])
#创建一个压缩的稀疏行矩阵compressed sparse row
print(sparse.csr_matrix(matrix))
[1 2 3]
[[1][2][4]]
[[1 2 3][4 5 6][7 8 9]]
[[1 2 3][4 5 6][7 8 9]]
> [[[0. 0. 0.][0. 0. 0.]]]
> [[[0. 0.][0. 0.]][[0. 0.][0. 0.]]]
>>> [[[1. 1. 1.][1. 1. 1.][1. 1. 1.]][[1. 1. 1.][1. 1. 1.][1. 1. 1.]]](0, 3)   1(1, 1) 2(1, 3) 1(2, 0) 1(2, 2) 3

选择元素

import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],[4,5,6],[7,8,9]])#第5个
print(v[5-1])
#第三行第二个元素
print(m[3-1][2-1])
print(m[2,1])#选取向量所有元素
print(v[:])#选取0到第三个
print(v[:3])#选取第三个到最后
print(v[3:])#选取最后一个
print(v[-1])#选取矩阵全部
print(m[:])
print(m)#选取矩阵第一行
print(m[0,:])#选取第一行和第三行
print(m[0,:],m[2,:])#选取第二列
print(m[:,1])
5
8
8
[1 2 3 4 5 6]
[1 2 3]
[4 5 6]
6
[[1 2 3][4 5 6][7 8 9]]
[[1 2 3][4 5 6][7 8 9]]
[1 2 3]
[1 2 3] [7 8 9]
[2 5 8]

矩阵的属性

import numpy as np
from scipy import sparse
m = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#行,列
a = m.shape
print(a)
print('r=%d,c=%d'%(a[0],a[1]))#元素数量
print(m.size)#矩阵的维数
print(m.ndim)
(3, 4)
r=3,c=4
12
2

虽然矩阵有4列,但是因为4个基向量是线性相关的,最大线性无关组只有两个,维数也就只有两个。

矩阵的秩

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0]])print(np.linalg.matrix_rank(m))
2

矩阵的迹

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0]])print(m.trace())
15

vectorize

import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],[4,5,6],[7,8,9]])#创建一个向量化的函数
func = np.vectorize(lambda x:x+100)  #vectorize把一个函数变成另一个函数
#对所有元素应用这个函数
print(func(m))#直接操作也行
print(m-100)print(m*2)print(m/2)
[[101 102 103][104 105 106][107 108 109]]
[[-99 -98 -97][-96 -95 -94][-93 -92 -91]]
[[ 2  4  6][ 8 10 12][14 16 18]]
[[0.5 1.  1.5][2.  2.5 3. ][3.5 4.  4.5]]

最值、平均值、方差、标准差

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3],[4,5,6],[7,8,9]])print(np.max(m))
print(np.min(m))
print(np.mean(m))
print(np.var(m))
print(np.std(m))
9
1
5.0
6.666666666666667
2.581988897471611

矩阵变形

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0]])#变形前后元素个数一样
print(m.reshape(2,6))
[[1 2 3 0 4 5][6 0 7 8 9 0]]

转置

import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6,7,8,9])
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0]])print(m.T)#向量只是值的集合,不能转置
print(v)
print(v.T)
print(np.array([1,2,3,4,5,6,7,8,9]).T)
[[1 4 7][2 5 8][3 6 9][0 0 0]]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]

矩阵展开

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0]])print(m.flatten())
[1 2 3 0 4 5 6 0 7 8 9 0]

高级操作

行列式

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0],[0,0,0,0]])print(np.linalg.det(m))
0.0

对角线元素

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],[4,5,6,0],[7,8,9,0] ])print(m.diagonal())
[1 5 9]

特征值和特征向量

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],[4,5,6,0],[7,8,9,0],[0,0,1,4]])#特征值和特征向量
a,b = np.linalg.eig(m)print(a)
print('-------------')
print(b)
[16.33839194+0.j         -0.29035096+0.55867363j -0.29035096-0.55867363j3.24230999+0.j        ]
-------------
[[-0.25665901+0.j         -0.69644039+0.j         -0.69644039-0.j0.70851102+0.j        ][-0.52018868+0.j          0.14699415-0.42878781j  0.14699415+0.42878781j-0.35480461+0.j        ][-0.81191118+0.j          0.37461056+0.39175996j  0.37461056-0.39175996j-0.36840126+0.j        ][-0.06580365+0.j         -0.07416678-0.10096959j -0.07416678+0.10096959j0.48621634+0.j        ]]

点积和叉积

import numpy as np
from scipy import sparsea = np.array([1,2,3,4])
b = np.array([11,2,3,4])
print(np.dot(a,b))c = np.array([[34,2],[1,3]])
d = np.array([[2,9],[0,1]])
print(np.cross(c,d)) #cross必须是两个二维矩阵相叉乘,或两个三维矩阵相叉乘e = np.array([[1,2],[1,0]])
f = np.array([[3,5],[1,2]])
print(np.cross(e,f))
40
[302   1]
[-1  2]

两个二维矩阵叉乘公式
A=[a11a12a21a22]A = \left[ \begin{matrix} a_{11} \quad a_{12} \\ a_{21} \quad a_{22} \\ \end{matrix}\\ \right]A=[a11​a12​a21​a22​​]
B=[b11b12b21b22]B = \left[ \begin{matrix} b_{11} \quad b_{12} \\ b_{21} \quad b_{22} \\ \end{matrix} \right]B=[b11​b12​b21​b22​​]

A×B=[a11b12−a12b11a21b22−a22b21]A\times B = \left[ \begin{matrix} a_{11}b_{12} - a_{12}b_{11} \qquad a_{21}b_{22} - a_{22}b_{21}\end{matrix}\right]A×B=[a11​b12​−a12​b11​a21​b22​−a22​b21​​]

矩阵的逆

import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],[4,5,6,4],[7,8,9,2],[1,3,12,5]])print(np.linalg.inv(m))
[[ 8.42857143e+00 -2.01428571e+01  1.04285714e+01  1.42857143e-01][-8.85714286e+00  2.12857143e+01 -1.08571429e+01 -2.85714286e-01][ 1.09523810e+00 -2.80952381e+00  1.42857143e+00  1.42857143e-01][ 1.00000000e+00 -2.00000000e+00  1.00000000e+00  1.70803542e-17]]

生成随机数

import numpy as np#设置随机数种子
np.random.seed(0)#生成3个0到1的数
print(np.random.random(3))  #默认0~1#生成3个1到100的整数
print(np.random.randint(0,101,3))#从1<=x<2 中抽3个
print(np.random.uniform(1,2,3))#正态分布
#平均值0,标准差1
print(np.random.normal(0,1,3))#逻辑分布
#平均值0,散布程度1
print(np.random.logistic(0,1,3))
[0.5488135  0.71518937 0.60276338]
[67  9 83]
[1.64589411 1.43758721 1.891773  ]
[-0.10321885  0.4105985   0.14404357]
[ 0.27387744  2.52093742 -2.57088231]

【机器学习手册】【1】熟练使用向量矩阵和数组 —— 二维矩阵叉乘公式相关推荐

  1. python三维矩阵乘法_tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘

    最近看论文时看到了一个让我费解的操作. 二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵. 即: (n * c1) x (m * c1 * c2) x (n * c2) 得 n * m 实现主 ...

  2. php随机产生4乘4矩阵,PHP 用二维矩阵生成一个给定层数的杨辉(PASCAL)三角形

    原创.教学参考案例. 给定三角形的层数(N)后, 1. 把用来显示三角形的2维矩阵(2N*(N+1))的每个元素清理成零: 2. 将矩阵第一行中间位置的元素, 赋予 1: 3. 从第二行开始,确定每一 ...

  3. python 轮廓矩阵_二进制二维矩阵的python轮廓

    我想计算一个二元NxM矩阵中一个形状的凸壳.凸壳算法需要一个坐标列表,所以我采用纽比.阿尔格何处(im)具有所有形状点坐标.但是,这些点中的大多数并没有对凸包起作用(它们位于形状的内部).因为凸包计算 ...

  4. matlab如何将三维转为二维_matlab三维矩阵怎么转为二维矩阵?

    展开全部 a=rand(m,n,6) b=reshape(m*n,6) 一个示例: >> a=rand(2,3,2) a(:,:,1) = 0.8147    0.1270    0.63 ...

  5. 【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵

    首先,使用下面的代码,创建3个2×2的矩阵A.B.C. import numpy as np A = [[1, 2], [3, 4]] B = [[5, 6], [7, 8]] C = [[9, 9] ...

  6. 机器学习之数学基础(二)~数组、向量、矩阵、向量空间、二维矩阵

    1. 概述 在学习机器学习(machine learning)或模式识别(pattern recognition)过程中,我经常会困惑于向量.数组和矩阵这三种数据结构,而在学习张学工教授<模式识 ...

  7. 二维矩阵乘法、矩阵转置、 矩阵与向量乘法(java实现)

    二维矩阵乘法.矩阵转置. 矩阵与向量乘法(java实现) 相关代码如下: package algorithms; //矩阵库 public class Matrisx { /***向量点相乘 doub ...

  8. [学习笔记]人工智能-神经网络对数据进行分类,构建二维矩阵

    1.对投喂数据进行极值获取,构造更多数据做准备 示例 plot_decision_regions(x, y, ppn, resolution=0.02)def plot_decision_region ...

  9. openCV图像矩阵Mat和二维数组的互相转换

    openCV图像矩阵Mat和二维数组的互相转换 在openCV的应用中,我们获取图像的矩阵信息很简单.但是我们可能想调用其他的矩阵运算库(比如Eigen库)来进行计算.那么我们就需要把openCV读取 ...

  10. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

最新文章

  1. c语言排班系统设计报告,C语言课程设计关于排班系统的一些问题
  2. java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统
  3. Leetcode--621. 任务调度器
  4. Oracle 1204 RAC failover 测试 (一)
  5. UIUC CS241 系统编程中文讲义校对活动 | ApacheCN
  6. 报错--Problem executing scripts APT::Update
  7. iOS进阶(XML、JSON数据解析)
  8. 全栈开发永远成不了高级程序员?!
  9. Android应用开发基础 余永佳,Android应用开发基础(基于Android4.2、任务驱动式)教学课件作者余永佳赵佩华习题课件.doc...
  10. python3 ftplib_python3从零学习-5.10.9、ftplib—FTP 协议客户端
  11. 用命令行netsh修改windows的ip、网关、dns
  12. html时钟自动刷新抖音,抖音上炫酷的网红文字时钟
  13. JAVAFX的table样式修改
  14. 用户6.5亿 墨迹天气难舍现金贷广告:合作方仅小米贷款
  15. 基于HTML+CSS+JavaScript仿淘宝购物商城设计毕业论文源码
  16. Java开发真的这么赚钱?连做金融的忍不住转行了
  17. python 开发环境的搭建
  18. 生成百度网盘可折叠目录树教程 百度网盘html可折叠目录树
  19. c语言实现股票软件cost函数,高仿真(主图){源码 有成本未来函数COST}
  20. “不念过往,不畏将来”——2017年山东省第八届ACM大学生程序设计竞赛总结

热门文章

  1. FPGA20个例程专栏介绍
  2. phpstudy以及DVWA安装使用
  3. matlab怎么将程序加密,对于MATLAB M文件怎么加密
  4. Linux Command diff 文件比较
  5. 《Unity Shader入门精要》冯乐乐著 书中彩图
  6. 论文笔记-LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
  7. 企业微信小程序 windows 使用 vconsole 调试
  8. 转换小写金额为大写金额
  9. 2020年中青杯数学建模B题思路
  10. link.html百度云,网盘链接自取