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

猜你喜欢

转载自blog.csdn.net/feiyuxiucun/article/details/81323666