【问题标题】:Treat each row of a matrix as a vector in a MATLAB function将矩阵的每一行视为 MATLAB 函数中的向量
【发布时间】:2014-11-02 07:47:08
【问题描述】:

假设我有一个nxm 矩阵并希望将每一行视为函数中的向量。因此,如果我有一个添加向量的函数,找到向量的笛卡尔积或出于某种原因接受多个向量的输入,我希望该函数将矩阵中的每一行视为一个向量。

【问题讨论】:

  • 这个问题太笼统了,很难回答。 A(i,:) 为您提供矩阵的第 i 行作为向量,根据您的情况,您可以使用 for-loop 或 arrayfun
  • 对不起,我试图使它足够通用以适用于所有人。我有一个名为 setprod 的函数,它采用 2 个或更多向量的笛卡尔积。我想在该函数中输入一个大矩阵,并将每一行作为一个向量读取。这更清楚了吗?
  • 您是要获取每对向量的乘积,还是仅获取一些向量与其他一些向量的乘积?
  • 所有向量的笛卡尔积。因此,如果 [1 2] [3 4] [5 6] 是我的向量,我想要 [1 3 5, 1 3 6, 1 4 6....] 函数的输入是 [1 2; 3 4; 5 6]
  • 所以我认为您需要 EDIT 您的问题,并在您之前的评论中以确切的形状添加 FULL 输出作为示例输入你想要的(即到目前为止,你的输出只是一个行向量,你正在混合使用的空格和逗号,就像你做同样的事情一样:/)。这是如何在 matlab 中做笛卡尔积:stackoverflow.com/questions/9834254/cartesian-product-in-matlab。要对逐行对进行操作,您可以使用pdist2,但可能不适用于集合,否则请使用nchoosek(1:n,2) 为循环创建成对索引

标签: matlab function matrix vector indexing


【解决方案1】:

这听起来很像 Matlab 中的一个操作。您可以使用A(i, :) 访问矩阵Aith 行。例如,要添加行ij,您可以使用A(i, :) + A(j, :)

【讨论】:

  • 我想把每一行都当作一个向量。所以说我想通过 j 编辑行,我该怎么做?
【解决方案2】:

给定一个 nxm 矩阵 A:

  1. 如果要编辑单个列/行,可以使用以下语法:A(:, i) 用于第 i 列,A(i, :) 用于第 i 行。
  2. 如果您想从列/行 i 编辑到列/行 j,您可以使用以下语法:A(:, i:j) 或 A(i:j, :)
  3. 如果您想从倒数第二列/行编辑(即)到最后一列,您可以:A(:, end-1:end) 或 A(end-1:end, :)

编辑: 我无法在上面添加评论,因为我没有 50 分,但您应该发布函数 setprod。我认为你应该能够做你想做的事,通过迭代你作为参数传递的矩阵,使用 for-next 语句。

【讨论】:

【解决方案3】:

我认为你将不得不循环:

输入

M = [1 2; 
     3 4; 
     5 6];

第 1 步:生成所有可能行对的列表(行索引号)

n = size(M,1);
row_ind = nchoosek(1:n,2)

第 2 步:遍历这些索引并生成产品集:

S{n,n} = []; //% Preallocation of cell matrix
for pair = 1:size(row_ind,1)
    p1 = row_ind(pair,1);
    p2 = row_ind(pair,2);
    S{p1,p2} = setprod(M(p1,:), M(p2,:))
end

【讨论】:

    【解决方案4】:

    使用这两个步骤将矩阵转换为行向量列表:

    1. 使用mat2cell 将矩阵转换为矩阵行的元胞数组。
    2. 使用单元格内容的linear indexing 从单元格数组生成comma-separated list

    例子:让

    v1 = [1 2];
    v2 = [10 20];
    v3 = [11 12];
    M = [v1; v2; v3];
    

    并让fun 成为一个函数,它接受任意数量的向量作为其输入。那么

    C = mat2cell(M, ones(1,size(M,1)));
    result = fun(C{:});
    

    result = fun(v1, v2, v3)相同。

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      相关资源
      最近更新 更多