MATLAB中accumarray函式詳解

2021-07-31 03:51:14 字數 1990 閱讀 8660

matlab中accumarray函式詳解

先看看subs和val的具體內容

subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];

subs =

1     1     1

2     1     2

2     3     2

2     1     2

2     3     2

val = (101:105)'

val =

101102

103104

105val的元素個數與subs的行數是一致的。

a = accumarray(subs, val)的實現過程分成2步。

第一步是把val中的元素,按照subs對應行所給出的下標放到乙個新的cell矩陣b中(cell是為了方便解釋,也就是說b矩陣中的每個位置可以放入多個數值),注意,subs的值是b的下標,不是val的。舉例來說,subs第一行[ 1     1     1],意思就是把val中第乙個元素(val(1))放入到b(1,1,1)的位置,依次類推,val(2)放入到b(2     1     2),val(3)放入到b(2     3    2),val(4)放入到b(2     1     2),val(5)放入到b(2    3   2)。此時,可以看到b(1,1,1)中有1個數(val(1));b(2     1    2)有2個數(val(2),val(4));b(2     3    2)也有2個數(val(3),val(5))。

第二步,把b中每個單元中的數分別累加,並放入到a的對應位置。

注:accumarray預設的是把每個單元中的數累加,因為對每個單元中的數的預設處理函式是sum。可以通過a = accumarray(subs,val,,@fun)的呼叫格式來指定其他的處理函式,比如說mean。對指定的fun函式的要求是,接受列向量輸入,輸出單個的數值型,、字元型或邏輯型變數。

a的維數與b相同,a中的元素預設為零。a的大小為max(subs(1))×max(subs(2))×max(subs(3))...

因此,a(1,1,1)=val(1)=101;

a (2 , 1 , 2)=val(2)+val(4)=102+104=206;

a (2, 3 ,  2)=val(3)+val(5)=1-03+105=208,

a的其他位置都為零。輸出a就得到

a(:,:,1) =

101     0     0

0     0     0

a(:,:,2) =

0     0     0

206     0   208

很顯然,a的維數與subs的列數相等。

a = accumarray(subs, val)

a = accumarray(subs,val,sz)

sz 可以用來指定a大小,但是不能小於a = accumarray(subs, val)得到的a的大小。比如a = accumarray(subs, val)的到a是乙個3×4的二維矩陣,那麼sz應當為乙個包含2個元素的向量sz=[m1,m2] (sz向量的長度和a的維數相等),其中,m1大於等於3,m2大於等於4. 但是,當得到的a是乙個p×1的一維向量時,sz=[m,1],m大於等於p。另外,sz可以賦值為空,表示由函式自動決定a的大小。

a = accumarray(subs,val,sz,fun)

fun可以指定專門的處理函式,預設的處理函式為sum

a = accumarray(subs,val,sz,fun,fillval)

fillval指定a中元素的預設值。可以等於nan

a = accumarray(subs,val,sz,fun,fillval,issparse)

isspares選擇a是否使用稀疏矩陣的格式

a = accumarray(, val,...)

,等同於a = accumarray(subs, val,...),此時,subs=[subs1, subs2, ...]或者=[subs1;subs2; ...]

Matlab 在Matlab中如何畫圓

rectangle函式功能 建立二維矩形物件。1.1 rectangle position x,y,w,h 其中以x,y為起始座標開始,畫出長為w,寬為h的矩形。1.2 rectangle curvature a,b 指定矩陣邊的曲率,可以使它從矩形到橢圓不同變化,水平曲率x為矩形寬度的分數,是沿著...

Matlab中的括號()

matlab中經常會用到括號去引用某array或者是cel l的內容,但三者有什麼具體區別呢?中括號用來構建向量 vectors 或者是矩陣 matrices 如 6.9 9.64 sqrt 1 就是乙個有三個元素的向量。11 12 13 21 22 23 是乙個二乘三的矩陣.分號 用來結束一行。中...

MATLAB中fopen fprintf函式的用法

matlab中fopen函式在指定檔案開啟的例項如下 1 fopen 開啟檔案,賦予檔案代號。語法1 fid fopen filename,permission 用指定的方式開啟檔案 fid n n是正整數 表示檔案開啟成功,檔案代號是n.fid 1 表示檔案開啟不成功。fid在此次檔案關閉前總是有...