matlab中subs赋值范围,[转载]Matlab的accumarray(subs, val) 解释
先看看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 =
101
102
103
104
105
val的元素個數與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({subs1, subs2,
...}, val,...)
{subs1, subs2, ...},等同于A =
accumarray(subs, val,...),此時,subs=[subs1, subs2,
...]或者=[subs1;subs2; ...]
總結
以上是生活随笔為你收集整理的matlab中subs赋值范围,[转载]Matlab的accumarray(subs, val) 解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【智能车学习】FTM模块
- 下一篇: Influx Sql系列教程三:meas