代码之家  ›  专栏  ›  技术社区  ›  NoMoreZealots

MATLAB中的向量到矩阵语法

  •  2
  • NoMoreZealots  · 技术社区  · 17 年前

    mat = zeros(length(C),length(S));
    for j=1:length(C)
        mat(j,:)=C(j)*S;
    end
    

    mat = C * S(1:length(S))
    

    6 回复  |  直到 17 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    根据你的描述,这听起来像是一个简单的矩阵运算。你只需要确保你有正确的尺寸 C 和 S . C 应该是列向量( 长度(C) -by-1)和 S 应该是行向量(1-by- 长度(S) ).假设它们是正确的尺寸,只需执行以下操作:

    mat = C*S;
    

    如果你不确定它们的尺寸,这应该是可行的:

    mat = (C(:))*(S(:)');
    

    事实上,我对括号有点疯狂。其中一些是不必要的,因为没有操作顺序的问题。这是一个更简洁的版本:

    mat = C(:)*S(:)';
    

    解释:

    这 matrix multiplication operator 在MATLAB中,将生成 inner product outer product

    由于使用了 colon operator 以重塑向量参数的维度。语法 重塑内容 C 转换为单列向量。语法 S 重塑内容 S 转换为列向量,然后将其转换为行向量。当相乘时,这会得到一个大小矩阵( 长度(C) -by- 长度(S) ).

    注: 冒号运算符的这种使用适用于任何维度的向量和矩阵,允许您将它们的内容重塑为单列向量(这使得一些操作更容易,如所示 this other SO question ).

        2
  •  4
  •   Steve    17 年前

    尝试在MATLAB中执行以下操作:

    mat = C*S'
    

    C = [1; 2; 3];
    S = [2; 2; 9; 1];
    
    mat = zeros(length(C),length(S));
    for j=1:length(C)
        mat(j,:)=C(j)*S;
    end
    
    % Equivalent code:
    mat2 = C*S';
    
    myDiff = mat - mat2
    
        3
  •  2
  •   Vebjorn Ljosa    17 年前

    你是指以下内容吗?

    mat = zeros(length(C),length(S));
    for j=1:length(C)
        mat(j,:)=C(j)*S;
    end
    

    C' * S    % if C and S are row vectors
    C * S'    % if C and S are column vectors
    

    如果你不知道是否 C 和 S 是行向量还是列向量,你可以使用一个技巧将它们转换为列向量,然后进行转置 S 在将它们相乘之前:

    C(:) * S(:)'
    
        4
  •  1
  •   Tim Whitcomb    17 年前

    length(C) i 第四行是向量 S 按比例 C (因为给向量下标会得到标量)。在这种情况下,你可以做类似的事情

    mat = repmat(C,[1 length(S)]) .* repmat(S, [length(C) 1])
    

    C 跨列,以及 S 向下排。

        5
  •  1
  •   Loren    17 年前

    试试这个:

    C=1:3 S=1:5 mat1=C'*S

    (尤其是当你需要的函数不是更简单的MATLAB符号时)

        6
  •  0
  •   tvst    17 年前

    尝试使用meshgrid:

    [Cm, Sm] = meshgrid(C, S);
    mat = Cm .* Sm;
    

    编辑:没关系,矩阵乘法也可以。你只需要一个列向量C和一个行向量S。然后做C*S。