Matlab中的向量和數組(超詳細)
文章目錄
Matlab中的向量
介紹
matlab中的向量是隻有一行元素的數組,向量中的單個項通常稱爲元素。Matlab中的向量索引值從1開始,而不是從0開始。
創建向量
- 直接輸入值
例如:
這裏既可以用逗號來分割,也可以用空格
- 使用冒號輸入某一數字範圍的值,例如,C=1:4:20,其中第一個數字是起始值,第二個數字是步長,第三個數字是終止值。如果步長是1的話,可以不寫步長
例如:
- 使用函數linspace():用於創建兩個限定值之間固定數量的值。
例如:
其中第一個數字是起始值,第二個數字是終止值,第三個數字是這個區間向量的個數
- 函數zeros(1,n):創建全零的向量
例如:
其中第一個數字是數組的行數,第二個數字是數組的列數。
- 函數ones(1,n):創建全1的向量
例如:
其中第一個數字是數組的行數,第二個數字是數組的列數。
- rand(1,n):創建0~1之間的隨機數的向量
例如:
向量的大小
Matlab提供兩個函數來確定一般數組和特殊向量的大小:size()和length().
- size():返回向量中的行的數量和列的數量。由於向量是一維的,所以第一個每次輸出都是一
- length():返回數組行列大小的最大值,對於向量,表示其長度
例如:
索引向量
通過在括號內輸入零個(全部輸出)或多個元素的索引值,可以單個或分組訪問向量中的元素。可以通過以下兩種方式中的任意一種訪問向量中的元素: 使用數值向量和邏輯向量。
數值索引
通過在括號內輸入零個或多個元素的索引值,可以單個或分組訪問向量中的元素。
例子:
另外,索引環境中的關鍵字end表示向量中的最後一個元素的索引
**注意:**在Matlab中在賦值操作中輸入的索引超過當前的邊界,Matlab會自動擴列,空位用零補齊,比如,我們在這個例子中輸入A(10)看看會有什麼結果。
邏輯索引
我們來看一個例子:
創建了一個condition邏輯數組,通過數組來索引這個向量
縮短向量
有些時候,我們需要刪除向量中的元素。可以用索引將需要刪除的部分賦值爲[ ]
但是,縮短向量不是做正確的方法,因爲可能會導致一些邏輯問題,在可行的情況下,應該使用索引來複制需要保存的元素。
向量運算
算術運算
- 向量中的加減法運算
可以看見是對向量中每個元素進行加法運算,減法也一樣
- 向量中的乘法、除法.
例子
- 向量中的指數
和 的區別:
對於矩陣和數字之間的運算, 和 沒什麼區別,但是對於矩陣和矩陣之間, 表示矩陣對應元素相乘,而表示矩陣乘法。
邏輯運算
向量的邏輯運算會產生的邏輯結果向量。
例如:
邏輯與(&)和邏輯或(|):
例子:
find():可以用find()函數查找值爲true的元素在一個邏輯向量中的索引值
例如:
sum()、min()、max()、round()、ceil()、floor()、fix()
sum():向量中元素的總和;
min()、max():返回向量中元素最小最大值;
round()、ceil()、floor()、fix():常規取整、向上取整、向下取整、向零取整
切片
切片操作能將一個向量中的指定元素複製到另一個向量的不同位置。
看一個簡單的例子:
Maltab中的數組
向量是聚集相似數據集的最簡單的方法。而數組是向量的拓展,使其包括多個維度的數組,其中二維數組是每行具有相同的列,並且每列具有相同的行。
數組的屬性
- size():返回各個維度的大小
- length():返回數組的最大維度
創建數組
-
直接輸入值
和向量一樣,在數組中直接輸入值時,可以使用分號(;)或以新的一行來表示換行
-
zeros(m,n):創建m行n列的全0的數組
-
rand(m,n):創建m行n列的0~1隨機數的數組
-
randn(m,n):創建m行n列的正態分佈隨機數的數組
-
diag():返回對角線上的元素
訪問數組元素
數組的索引是從列開始,從上往下依次爲1,2,3 ,
例如:
數組運算
數組的算術運算
- 數組之間的加減
例子:
- 數組之間的乘法
數組和數字的乘法:對應元素相乘
例子:
數組與數組的乘法():一定要符合矩陣可乘。
例子
數組與數組之間的:對應元素相乘:
例子:
數組的邏輯運算
如果兩個數組具有相同的大小,或者其中一個數組是標量(及長度爲1的向量),邏輯運算可以同時執行在這兩個數組的各個元素上。
例如
sum()、max()、min()、round()、ceil()、floor()、fix()
-
sum():返回一個行向量,包含該數組每列的總和
-
max()和min():分別返回一個行向量,每列的最大值和每列的最小值
連接數組
看一個簡單的例子
切片數組
對一個數組進行切片:A(對行索引,對列索引)
例子:
重塑數組
有些時候我們希望將某一維度的數組變形爲另一種維度的需求,函數reshape()能完成這種邊形。
例子: