我想知道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
我想知道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
可以使用線性索引:
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
它運作良好。儘管製作單元格會很有用。 –
我不確定你的意思是「製造細胞」。在單個單元格中創建'rows','cols'和'third'?在三個單獨的單元陣列?單個矩陣的單元格? – Zep
讓我們假設你的矩陣的格式爲n乘M-通過-P。 在你的情況
N = 3;
M = 3;
P = 2;
這意味着行和coloms的最大長度從搜索(如果所有項目均爲零)是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
它更有記憶效率,我相信它必須更快。
使用電池來存儲值被發現。 – OmG