首页 > 其他分享 >NumPy_矩阵的八种运算以及变换矩阵

NumPy_矩阵的八种运算以及变换矩阵

时间:2023-05-25 20:35:57浏览次数:43  
标签:ones 矩阵 transrora 八种 points np NumPy dot

概念

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

相关文章

  • NumPy学习3
    继续学习NumPy,今天学习以下3个章节:7,NumPy高级索引8,NumPy广播机制9,NumPy遍历数组numpy_test3.py:importnumpyasnp'''7,NumPy高级索引NumPy与Python的内置序列相比,它提供了更多的索引方式。在NumPy中还可以使用高级索引方式,比如整数数组索引、布尔索引以及花式......
  • 求矩阵的值_为多表代换密码解密做准备
    介绍:先输入n,然后输入n*n矩阵,最后输出矩阵的值。#include<bits/stdc++.h>usingnamespacestd;floatresult;intA[1010][1010];floatAA[1010][1010];intn;voidSwap(float*a,float*b){for(inti=1;i<=n;++i){floattemp=a[i];......
  • 数据挖掘之numpy的使用
    @[TOC](文章目录)本文章是黑马程序员Python教程,4天快速入门Python数据挖掘,系统精讲+实战案例的学习笔记1.numpy简介numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组importnumpyasnpdata=np.array([[80,89,86,67,79],[78,97,89,6......
  • NumPy学习2
    继续学习NumPynumpy_test2.py:importnumpyimportnumpyasnp'''4,Numpy创建数组除了使用array()方法外,NumPy还提供了其他创建ndarray数组的方法。1)numpy.empty()numpy.empty()创建未初始化的数组,可以指定创建数组的形状(shape)和数据类型(dtype),语法格式如下:num......
  • NumPy_数据处理详解—矩阵运算-矩阵拼接
    基础内容坐标轴axis维度ndim和形状shape以及元素各个轴元素的个数索引--单个元素切片--多个元素[start:end:step]不包括终点的值当start是0时,可以省略;当end是列表的长度时,可以省略. trans_matrix[:3,:3] trans_matrix[......
  • Acwing 798.差分矩阵(模板)
    题目#include<iostream>usingnamespacestd;constintN=1010;intn,m,q;inta[N][N],b[N][N];voidinsert(intx1,inty1,intx2,inty2,intc){b[x1][y1]+=c;b[x2+1][y1]-=c;b[x1][y2+1]-=c;b[x2+1][y2+1]+=......
  • NumPy学习1
    NumPy是NumericalPython的缩写,它是一个由多维数组对象(ndarray)和处理这些数组的函数(function)集合组成的库。使用NumPy库,可以对数组执行数学运算和相关逻辑运算。NumPy不仅作为Python的扩展包,它同样也是Python科学计算的基础包。NumPy使用需求随着数据科学(DataScience,简......
  • 图解LeetCode——剑指 Offer 29. 顺时针打印矩阵
    一、题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。二、示例2.1>示例1:【输入】matrix=[[1,2,3],[4,5,6],[7,8,9]]【输出】[1,2,3,6,9,8,7,4,5]2.2>示例2:【输入】matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]【输出】[1,2,3,4,8,12,11,10,9,5,6,7]限......
  • 矩阵入门
    矩阵向量与矩阵在线性代数中,向量分为列向量和行向量。向量也是特殊的矩阵,行向量可以看作是一个\(1\timesn\)的矩阵,例如下面这样:\[\begin{bmatrix}1&2&3&4&5\end{bmatrix}\]列向量可以看作是一个\(n\times1\)的矩阵,例如下面这样:\[\begin{bmatrix}1\\2\\3\\4\\5\e......
  • 邻接矩阵的算法设计
    题目描述假设图G采用邻接矩阵存储,分别设计实现以下要求的算法:1.输出每个顶点的入度2.输出每个顶点的出度3.求出度最大的一个顶点,输出其编号4.计算图中出度为0的顶点数5.判断图中是否有边<i,j> 解决思路1.入度是邻接矩阵中第i列的元素之和在函数InDegree()中,我们需要设置一个循环......