c++ 二維矩陣 轉vector_Python線性代數學習筆記——矩陣的基本運算和基本性質,實現矩陣的基本運算...

105a8104c85f37e42a43ad38fe8d6713.png

當學習完矩陣的定義以后,我們來學習矩陣的基本運算,與基本性質

ff8e6d2194020c24c6961f22c71f65d7.png

矩陣的基本運算:矩陣的加法,每一個對應元素相加,對應結果的矩陣

ae1c817068ce507e776b1a8063660322.png

例子:矩陣A和矩陣B表示的是同學上學期和下學期的課程的成績,兩個矩陣相加就表示一學年科目成績的總和

293c133e394775781822a59fd55e0e5b.png

矩陣的數量乘法:一個數乘于一個矩陣

78cc167809f67b05613ed0d64210eff6.png

還是接著上面學生成績的例子:

aa32a6a404bc167401336a31d77a69a3.png

矩陣數量乘法可以理解為,求兩學期學生科目成績的平均分1/2(A+B),因為之前我們已經算出了一學年科目的成績總和,現在只需要乘于二分之一就可以了。

矩陣的數量乘法還有一個幾何的直觀理解:

下圖的矩陣P可以理解為3個行向量組成,這3個行向量表示的是二維平面坐標系中的一個點,就是表示一個三角形,矩陣的數量乘法2.P之后,這個三角形就縮放變大了

720b234c8fffe77e64dedf869df84b81.png

矩陣的基本運算性質

ac08946799dcc3596ffa1ee08ad05bee.png

4994543d75ba6217c275b520b030bce8.png

簡單證明:k ?(A + B) = k ? A + k ? B(這都還用證????不過出于數學邏輯思維的嚴謹,還是需要證明的)

兩個矩陣:

b7ee3a31ff127cb090b91c9d04d1f283.png

d22ee14d842e2d07c0189dadf9e601e9.png

6bdf065af324bc0bb95cf94275c0c325.png

實現矩陣的基本運算

之前定義的向量類Vector:

import math
from ._globals import EPSILONclass Vector:def __init__(self, lst):self._values = list(lst)@classmethoddef zero(cls, dim):"""返回一個dim維的零向量"""return cls([0] * dim)def __add__(self, another):"""向量加法,返回結果向量"""assert len(self) == len(another), "Error in adding. Length of vectors must be same."return Vector([a + b for a, b in zip(self, another)])def __sub__(self, another):"""向量減法,返回結果向量"""assert len(self) == len(another), "Error in subtracting. Length of vectors must be same."return Vector([a - b for a, b in zip(self, another)])def norm(self):"""返回向量的模"""return math.sqrt(sum(e**2 for e in self))def normalize(self):"""返回向量的單位向量"""if self.norm() < EPSILON:raise ZeroDivisionError("Normalize error! norm is zero.")return Vector(self._values) / self.norm()def dot(self, another):"""向量點乘,返回結果標量"""assert len(self) == len(another), "Error in dot product. Length of vectors must be same."return sum(a * b for a, b in zip(self, another))def __mul__(self, k):"""返回數量乘法的結果向量:self * k"""return Vector([k * e for e in self])def __rmul__(self, k):"""返回數量乘法的結果向量:k * self"""return self * kdef __truediv__(self, k):"""返回數量除法的結果向量:self / k"""return (1 / k) * selfdef __pos__(self):"""返回向量取正的結果向量"""return 1 * selfdef __neg__(self):"""返回向量取負的結果向量"""return -1 * selfdef __iter__(self):"""返回向量的迭代器"""return self._values.__iter__()def __getitem__(self, index):"""取向量的第index個元素"""return self._values[index]def __len__(self):"""返回向量長度(有多少個元素)"""return len(self._values)def __repr__(self):return "Vector({})".format(self._values)def __str__(self):return "({})".format(", ".join(str(e) for e in self._values))

定義一個內部使用的文件_globals,用來存儲全局使用的變量 EPSILON,用來判斷精度用的

f05f1761c04fcfb50e4c54b1c016f61c.png
EPSILON = 1e-8

定義的矩陣類Matrix:

from .Vector import Vectorclass Matrix:def __init__(self, list2d):self._values = [row[:] for row in list2d]@classmethoddef zero(cls, r, c):"""返回一個r行c列的零矩陣"""return cls([[0] * c for _ in range(r)])def __add__(self, another):"""返回兩個矩陣的加法結果"""assert self.shape() == another.shape(), "Error in adding. Shape of matrix must be same."return Matrix([[a + b for a, b in zip(self.row_vector(i), another.row_vector(i))]for i in range(self.row_num())])def __sub__(self, another):"""返回兩個矩陣的減法結果"""assert self.shape() == another.shape(), "Error in subtracting. Shape of matrix must be same."return Matrix([[a - b for a, b in zip(self.row_vector(i), another.row_vector(i))]for i in range(self.row_num())])def __mul__(self, k):"""返回矩陣的數量乘結果: self * k"""return Matrix([[e * k for e in self.row_vector(i)]for i in range(self.row_num())])def __rmul__(self, k):"""返回矩陣的數量乘結果: k * self"""return self * kdef __truediv__(self, k):"""返回數量除法的結果矩陣:self / k"""return (1 / k) * selfdef __pos__(self):"""返回矩陣取正的結果"""return 1 * selfdef __neg__(self):"""返回矩陣取負的結果"""return -1 * selfdef row_vector(self, index):"""返回矩陣的第index個行向量"""return Vector(self._values[index])def col_vector(self, index):"""返回矩陣的第index個列向量"""return Vector([row[index] for row in self._values])def __getitem__(self, pos):"""返回矩陣pos位置的元素"""r, c = posreturn self._values[r][c]def size(self):"""返回矩陣的元素個數"""r, c = self.shape()return r * cdef row_num(self):"""返回矩陣的行數"""return self.shape()[0]__len__ = row_numdef col_num(self):"""返回矩陣的列數"""return self.shape()[1]def shape(self):"""返回矩陣的形狀: (行數, 列數)"""return len(self._values), len(self._values[0])def __repr__(self):return "Matrix({})".format(self._values)__str__ = __repr__

測試代碼:

from playLA.Matrix import Matrixif __name__ == "__main__":matrix = Matrix([[1, 2], [3, 4]])print(matrix)print("matrix.shape = {}".format(matrix.shape()))print("matrix.size = {}".format(matrix.size()))print("len(matrix) = {}".format(len(matrix)))print("matrix[0][0] = {}".format(matrix[0, 0]))matrix2 = Matrix([[5, 6], [7, 8]])print(matrix2)print("add: {}".format(matrix + matrix2))print("subtract: {}".format(matrix - matrix2))print("scalar-mul: {}".format(2 * matrix))print("scalar-mul: {}".format(matrix * 2))print("zero_2_3: {}".format(Matrix.zero(2, 3)))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 4.4以上能夠實現的沉浸式狀態欄效果

僅僅有android4.4以及以上的版本號才支持狀態欄沉浸效果 先把程序執行在4.4下面的手機上,看下效果: 在4.4以上的效果: 當然圖片也是能夠作為背景的.效果: 代碼: if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {Window window getWindow();window.setFlags(Wind…

為abp vnext生成C#客戶端給非abp第三方net程序使用

abp vnext提供了動態C#API客戶端和靜態C#API客戶端來調用abp項目的接口&#xff0c;但是有局限性&#xff1b;要使用動態C#API客戶端的項目必須也是ABP vnext的項目。靜態C#API客戶端也依賴abp的包&#xff0c;如下圖為的靜態客戶端依賴于 Volo.Abp.DependencyInjection、Volo.…

項目中引入composer包

假如在云服務器上&#xff0c;項目根目錄在 /data/shop&#xff0c;則 示例&#xff1a; cd /data/shop響應的結果可能會有兩種: 1、第一種是直接require成功 示例&#xff1a; composer require haveyb/tiny-laravel #響應結果 ./composer.json has been created Loading …

圓的擬合

1.三點求圓心和半徑 https://blog.csdn.net/liyuanbhu/article/details/52891868 2.最小二乘擬合圓轉載于:https://www.cnblogs.com/yhlx125/p/9671641.html

printf()函數不能直接輸出string類型

因為string不是c語言的內置數據&#xff0c;所以直接printf輸出string類型的是辦不到的。 要這樣輸出: printf("%s\n",a.c_str()); 舉例: #include<bits/stdc.h> using namespace std; int main(){string a"人生";printf("%s\n",a.c_str()…

C#項目代碼規范

目的 1.方便代碼的交流和維護。 2.不影響編碼的效率&#xff0c;不與大眾習慣沖突。 3.使代碼更美觀、閱讀更方便。 4.使代碼的邏輯更清晰、更易于理解。 在C#中通常使用的兩種編碼方式如下 Camel(駝峰式)&#xff1a; 大小寫形式&#xff0d;除了第一個單詞&#xff0c;所有單…

.NET MAUI實戰 FolderPicker

1.概要最近在遷移 GeneralUpdate.Tool的時候需要用到文件夾選擇&#xff0c;在MAUI中可以使用FolderPicker進行選擇。注意&#xff0c;和上篇文章的文件選擇不一樣。因為在.NET MAUI中目前還沒有傻瓜式直接可用的FolderPicker供開發者使用所以需要自己動手做一些修改。完整示例…

h5外賣源碼php_校園食堂外賣APP走紅 更多APP定制開發上一品威客網

近日&#xff0c;西安一高校推出了一款校園食堂外賣APP走紅網絡。該APP涵蓋學校食堂的所有飯菜&#xff0c;并可給該校的師生提供校園食堂飯菜外賣服務。飯菜價格與食堂統一&#xff0c;且僅供該校內的師生使用。 目前開發校園外賣訂餐系統可謂是一個較熱門的創業項目&#xff…

Python面向對象學習 1 (什么是面向對象,面向對象的應用場景,待更新)

程序設計的三種基本結構&#xff1a; 面向對象&#xff0c;面向過程&#xff0c;函數式編程1&#xff0c;什么是面向對象編程 面向對象編程是一種編程方式&#xff0c;此編程方式的落地需要使用 “類” 和 “對象” 來實現&#xff0c;所以&#xff0c;面向對象編程其實就是對 …

iPhone屏幕大小和適配建議(包括 XR XS XSM )

//4 ----:{{0, 0}, {320, 480}} //5、5s ----:{{0, 0}, {320, 568}} //6、6s、7、8 ----:{{0, 0}, {375, 667}} //6P、7P、8P ----:{{0, 0}, {414, 736}} 復制代碼X 系列 //X ----:{{0, 0}, {375, 812}} //XR ----:{{0, 0}, {414, 896}} //XS ----:{{0, 0}, {375, 812}} //XSM …

go語言中的方法method

package main;import "fmt"//重新定義一個類型 //為該INT類型擴展方法 type INT int;type A struct {name string; }type B struct {name string; }func main() {a : A{};a.Print();//指針傳遞a.Print2();fmt.Println(a);//同上(*A).Print2(&a);b : B{};b.Print(…

微信自定義tabbar有小紅點_自定義微信小程序tabBar組件上邊框的顏色

背景&#xff1a;在微信小程序的實際開發過程中&#xff0c;有時候我們需要修改微信小程序提供的 tabBar 組件頂部邊框的顏色&#xff0c;以滿足項目需求解決方案&#xff1a;方式一&#xff1a;通過tabBar組件自帶的 borderStyle 屬性來控制邊框的顏色&#xff0c;將邊框的顏色…

又一批優質.NET6實戰項目,面臨永久下線...

多好的實戰項目大家抓緊時間實操起來呀移動電商實戰這次能上岸&#xff0c;最重要的是這個Vue3VantUI.NET6SqlSugar移動電商實戰&#xff0c;全部都是最新最熱的技術棧&#xff0c;寫上簡歷后面試基本上都是問的這塊兒內容。我先給大家看看項目的UI。項目UI全套實戰源碼這個電商…

laravel 配置微信公眾號時{errcode:-106,errmsg:token check fail}

一、問題描述 做微信授權登錄時&#xff0c;遇到的一個坑&#xff0c;提示配置失敗&#xff0c;F12&#xff0c;響應為 errcode":-106,"errmsg":"token check fail 二、解決方案&#xff1a; 注&#xff1a;宗旨就是讓微信能夠訪問你填寫的網址&#xff…

電商企業怎樣用好大數據

電商企業怎樣用好大數據 大數據正在促生新的藍海&#xff0c;催生新的經濟增長點&#xff0c;正在成為政府和企業競爭的新焦點。2012年&#xff0c;瑞士達沃斯論壇發布《大數據&#xff0c;大影響》報告&#xff0c;稱“數據已經成為一種新的經濟資產類別&#xff0c;就像貨幣或…

ORACLE經常使用系統查詢

&#xfeff;&#xfeff;1 查詢系統全部對象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FROM DBA_OBJECTS WHERE OWNERUPPER(SCOTT) 2 查看系統全部表 SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES 3 查看全部用…

Safari 版本回退方法

回退條件 版本回退的前提是關閉電腦的SIP機制&#xff0c;命令行 csrutil status 檢測狀態。Mac os 10.14以下版本回退Safari后插件還是可以用的&#xff0c;升了新系統退了也沒法用了。我的是舊系統 SIP關閉方法 1 重啟MAC&#xff0c;按住cmdR直到屏幕上出現蘋果的標志和進度…

同步方法 調用異步防范_Spring一個注解實現方法的異步調用,再也不用單開線程了...

介紹同步調用先來演示一下什么是同步調用測試方法輸出如下doTaskOne start 1566121320372doTaskOne end 1566121321373doTaskTwo start 1566121321373doTaskTwo end 1566121322374可以看到方法一執行完畢&#xff0c;方法二才會執行異步調用不返回值1.Spring Boot啟動類上加Ena…

使用docker搭建redis主從

一、構建 Docker 環境 1、創建 dockerfile FROM centos:latest RUN groupadd -r redis && useradd -r -g redis redis RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools EXPOSE 63…

【源碼探索】.NET中的List,是哪種數據結構

“當你提出疑問并開始思考時&#xff0c;答案就離你不遠了”圖片&#xff1a;奧森公園的向日葵 拍攝于2022年7月23日 攝影師&#xff1a;劉先生01—問題緣起嚴格來說應該是List<T>&#xff0c;因為.NET的核心基礎類庫中&#xff0c;并沒有List&#xff0c;作為泛型類型的…