概念
numpy下的linalg=linear+algebra
01.数学概念
vector 向量 array:数组 matrix:矩阵
标量(数量) 物理定义:只有大小,没有方向的量
n个有次序的数a_{1}, a_{2}, ····,a_{n}所组成的数组称为n维向量 --行向量和列向量
数组,是有序的元素序列
m×n 个数aij (i= 1,2,…,m;j= 1,2,…,n)排成的m 行n 列的数表
标量(数量) 向量(矢量)矩阵 数组
02.计算机概念
数组是编程语言中的概念,类似数学概念的集合,由元素组成。
数组也被称为有序的元素序列,通过下标可访问相应的元素,其中的元素一般类型相同
在numpy中
vector 向量——一维数组
matrix 矩阵——二维数组 2维数组中,axis=0指列方向,axis=1指行方向
array 数组---n维数组 ndarray n维数组
矩阵的计算
numpy下的linalg=linear+algebra
np.linalg.inv():矩阵求逆
np.linalg.det():矩阵求行列式(标量)
np.linalg.eigh:计算矩阵特征向量
矩阵的加减法
矩阵的 数乘 乘法
矩阵的 转置 求逆矩阵 矩阵A的行列式|A|不等于0时才存在可逆矩阵
矩阵的 行列式
矩阵的特征值和特征向量
方阵的迹就是主对角元素之和
矩阵的乘法
矩阵乘法的 结合性:(AB)C = A(BC)
np.dot(np.dot(A, B), C) == np.dot(A, np.dot(B, C))
阵加法的分配性:(A+B)C=AC+BC
np.dot(A+B, C) == np.dot(A, C) + np.dot(B, C)
转置 np.dot(A, B).T == np.dot(B.T, A.T)
数乘的结合律
2*(np.dot(A, C)) ==np.dot(2*A, C) == np.dot(A, 2*C)
##一个是矩阵的转置操作(得到转置矩阵),一个是矩阵的逆操作(得到逆矩阵
运算形式
矩阵的内积:两个矩阵A、B对应分量乘积之和,结果为一个标量,
记作<A,B>(与向量的内积/点积/数量积的定义相似)。所以A、B的行数列数都应相同
分块矩阵的乘积
矩阵和向量的乘法---
向量:数乘 点乘(内积)、叉乘(外积)
矩阵:数乘 乘法 哈达玛积、 克罗内克积
一个矩阵的数乘,其实就是矩阵的每一个元素乘以该数
设A为m*s的矩阵,B为s*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,
记作C=AB,称为A右乘B,也即为B左乘A
线性代数中,矩阵的左乘和右乘可以简记为:“左乘行变换,右乘列变换”。
转换坐标系--世界到局部
A*B的结果可以理解为B矩阵经过A的转换,转到了和A同级别的坐标系下
点的左乘
局部坐标系旋转平移
转换矩阵的变换
正交矩阵
一个矩阵与它的转置矩阵相乘的结果是一个单位矩阵,则该矩阵被称为一个正交矩阵
正交矩阵的转置矩阵与逆矩阵相等
旋转矩阵是正交矩阵 3*3
坐标变换矩阵是正交矩阵
不是所有的4*4矩阵都是变换矩阵--变换矩阵对数据的位置是有要求的
齐次坐标 --
示例代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-#
import numpy as np
if __name__ == '__main__':
m_points_ones=np.array([
[5,6,7,1],
[2,3,4,1]])
transrora_m_v=np.array([
[5,2,3,6],
[6,3,2,5],
[8,9,1,2],
[0,0,0,1]])
transrora_v_s=np.array([
[2,2,3,4],
[6,3,4,5],
[7,8,9,6],
[0,0,0,1]])
##变换方式 01
v_points = np.dot(transrora_m_v,m_points_ones.T).T
s_points = np.dot(transrora_v_s,v_points.T).T
print("result s_points",s_points)
##变换方式 02
transrora_m_s = np.dot(transrora_v_s,transrora_m_v)
s_2_points = np.dot(transrora_m_s,m_points_ones.T).T
print(transrora_m_s)
print("result s_2_points" ,s_2_points)
###变换方式 03
s_3_points = np.dot(m_points_ones,np.dot(transrora_m_v.T, transrora_v_s.T ) )
print(np.linalg.inv(transrora_m_v),transrora_m_v,transrora_m_v.T )
print("result s_3_points",s_3_points)
### E_array 是单位矩阵,transrora_m_v才可能是正交矩阵--不是所有的矩阵都是变换矩阵--变换矩阵是正交矩阵,
# 手动给变换矩阵的时候,注意判断是都为正交矩阵
E_array = np.dot(transrora_m_v,transrora_m_v.T)
print(E_array)
# data_hom = np.hstack( [m_points_ones[:,:3], np.ones(m_points_ones.shape[0]).reshape(-1,1) ] )
# data_hom = np.vstack( [m_points_ones[:,:3].T, np.ones(m_points_ones.shape[0]) ] ).T
# print(data_hom)
参考
《Numpy 数据处理详情>-python机器学习和数据科学中的高性能计算方法》
标签:ones,矩阵,transrora,八种,points,np,NumPy,dot
From: https://www.cnblogs.com/ytwang/p/17432766.html