构造不同长度的向量

时间:2017-08-24 11:40:35

标签: matlab indexing signal-processing

我想在3维空间中找出rowcolumn个零。问题是我每次都得到不同长度的输出矢量(例如行),因此发生尺寸误差。 我的尝试:

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 个答案:

答案 0 :(得分:1)

您可以使用线性索引:

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

答案 1 :(得分:0)

假设您的Matrix的格式为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它更有效,我相信它必须更快。