matlab中subs赋值范围,[转载]Matlab的accumarray(subs, val) 解释
先看看subs和val的具體內(nèi)容
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的元素個(gè)數(shù)與subs的行數(shù)是一致的。
A = accumarray(subs, val)的實(shí)現(xiàn)過(guò)程分成2步。
第一步是把val中的元素,按照subs對(duì)應(yīng)行所給出的下標(biāo)放到一個(gè)新的cell矩陣B中(cell是為了方便解釋,也就是說(shuō)B矩陣中的每個(gè)位置可以放入多個(gè)數(shù)值),注意,subs的值是B的下標(biāo),不是val的。舉例來(lái)說(shuō),subs第一行[
1?1?1],意思就是把val中第一個(gè)元素(val(1))放入到B(1,1,1)的位置,依次類(lèi)推,val(2)放入到B(2?1?2),val(3)放入到B(2?3?2),val(4)放入到B(2?1?2),val(5)放入到B(2?3?2)。此時(shí),可以看到B(1,1,1)中有1個(gè)數(shù)(val(1));B(2?1?2)有2個(gè)數(shù)(val(2),val(4));B(2?3?2)也有2個(gè)數(shù)(val(3),val(5))。
第二步,把B中每個(gè)單元中的數(shù)分別累加,并放入到A的對(duì)應(yīng)位置。
注:accumarray默認(rèn)的是把每個(gè)單元中的數(shù)累加,因?yàn)閷?duì)每個(gè)單元中的數(shù)的默認(rèn)處理函數(shù)是sum。可以通過(guò)A
=
accumarray(subs,val,[],@fun)的調(diào)用格式來(lái)指定其他的處理函數(shù),比如說(shuō)mean。對(duì)指定的fun函數(shù)的要求是,接受列向量輸入,輸出單個(gè)的數(shù)值型,、字符型或邏輯型變量。
A的維數(shù)與B相同,A中的元素默認(rèn)為零。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的維數(shù)與subs的列數(shù)相等。
A = accumarray(subs, val)
A = accumarray(subs,val,sz)
sz 可以用來(lái)指定A大小,但是不能小于A = accumarray(subs, val)得到的A的大小。比如A =
accumarray(subs, val)的到A是一個(gè)3×4的二維矩陣,那么sz應(yīng)當(dāng)為一個(gè)包含2個(gè)元素的向量sz=[m1,m2]
(sz向量的長(zhǎng)度和A的維數(shù)相等),其中,m1大于等于3,m2大于等于4.
但是,當(dāng)?shù)玫降腁是一個(gè)p×1的一維向量時(shí),sz=[m,1],m大于等于p。另外,sz可以賦值為空,表示由函數(shù)自動(dòng)決定A的大小。
A = accumarray(subs,val,sz,fun)
fun可以指定專(zhuān)門(mén)的處理函數(shù),默認(rèn)的處理函數(shù)為sum
A = accumarray(subs,val,sz,fun,fillval)
fillval指定A中元素的默認(rèn)值。可以等于NaN
A = accumarray(subs,val,sz,fun,fillval,issparse)
isspares選擇A是否使用稀疏矩陣的格式
A = accumarray({subs1, subs2,
...}, val,...)
{subs1, subs2, ...},等同于A =
accumarray(subs, val,...),此時(shí),subs=[subs1, subs2,
...]或者=[subs1;subs2; ...]
總結(jié)
以上是生活随笔為你收集整理的matlab中subs赋值范围,[转载]Matlab的accumarray(subs, val) 解释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【智能车学习】FTM模块
- 下一篇: 无人机边缘计算中的计算卸载——Stack