代码之家  ›  专栏  ›  技术社区  ›  Muhammad Akmal

构造不同长度的向量

  •  0
  • Muhammad Akmal  · 技术社区  · 8 年前

    我想知道 row column 三维空间中的零数。问题是我每次都会得到不同长度的输出向量(例如行),因此会出现尺寸误差。

    a (:,:,1)= [1 2 0; 2 0 1; 0 0 2]
    a (:,:,2) = [0 2 8; 2 1 0; 0 0 0]
    
    for i = 1 : 2
    [row(:,i) colum(:,i)] = find(a(:,:,i)==0);
    end
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Zep    8 年前

    可以使用线性索引:

    a (:,:,1) = [1 2 0; 2 0 1; 0 0 2];
    a (:,:,2) = [0 2 8; 2 1 0; 0 0 0];
    
    % Answer in linear indexing
    idx = find(a == 0);
    
    % Transforms linear indexing in rows-columns-3rd dimension
    [rows , cols , third] = ind2sub(size(a) ,idx)
    

    有关该主题的更多信息,请参阅 Matlab's help

        2
  •  0
  •   Irreducible    8 年前

    假设矩阵的格式为N-by-M-by-P。

    N = 3;
    M = 3;
    P = 2;
    

    这意味着搜索中的行和冒号的最大长度(如果所有条目都为零)为 N*M=9

    %alloc output
    row=zeros(size(a,1)*size(a,2),size(a,3));
    colum=row;
    %loop over third dimension
    n=size(a,3);
    for i = 1 : n 
        [row_t colum_t] = find(a(:,:,i)==0); 
        %copy your current result depending on it's length
        row(1:length(row_t),i)=row_t;
        colum(1:length(colum_t),i)=colum_t;
    end
    

    然而,当您将结果传递到下一个函数/脚本时,您必须记住对非零元素进行操作。

    我会选择Zep的矢量解。对于较大的矩阵 a