我想在3维空间中找出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
答案 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
它更有效,我相信它必须更快。