1. 程式人生 > >matlab陣列語法(2)

matlab陣列語法(2)

accumarray():

  • A = accumarray(subs,val)
>> subs = [1 2 4 2 4 4 4 4]
>> accumarray(subs',1)              % subs必須是列向量
ans = 
    1; 2; 0; 5                      % 返回結果為:subs裡面有幾個‘1’,‘2’,‘3’,‘4’
>> subs=[3 1 1 9 7 4 10 1]
>> val =[5 4 8 8 2 5 5 7]
>> accumarray(subs',val)             % subs必須變成列向量 
ans = 
    19 0 5 5 0 0 2 0 8 5             % subs(1)=3,只出現一次,則ans(3)等於subs(3)中對應位置的值
                                     % subs(2)=subs(3)=subs(8)=1,則ans(1)等於subs中出現1的                        
                                     % val對應位置元素相加

deal():

  • [y1,y2,...,yn] = deal(x)                   // 分別把x賦值給y1,y2,...,yn
  • [y1,y2,...,yn] = deal(x1,...,xn)        // y1=x1,x2=y2,...,xn=yn

factor():

  • f = factor(n)                                  // 返回一個行向量,其元素是 n 的約數
>> f = factor(200)
>> f 
    2  2  2  5  5

pdist():

  • D = pdist(X)               

//  計算X中各對行向量的相互距離(假設X是一個 m-by-n的矩陣)。D是一個長為 m(m-1)/2的行向量,可以這樣理解D的生成:首先生成一個X的距離方陣,由於該方陣是對稱的,且對角線上的元素為0,所以取得此方陣的下三角元素,按照matlab中矩陣的按列儲存原則,此下三角個元素的索引排列即為(2,1),(3,1),。。。,(m,1),...,(m,m-1)。可以用命令squareform(D)將此行向量轉換為原距離矩陣。(squareform函式是專門幹這事的,其逆變換也是squareform)。

squareform():

  • Z = squareform(y)     // y是一個向量,此函式經常和qdist配套使用。
>> y = 1 2 3 4 5 6
>> X = squareform(y)
>> X 
    0  1  2  3
    1  0  4  5
    2  4  0  6
    3  5  6  0
  • y = squareform(Z)         // 上面函式的反過程

>> Z =
    0  1  2  3
    1  0  4  5
    2  4  0  6
    3  5  6  0
>> y = squareform(Z)
>> y
    1  2  3  4  5  6