find
functionを使用して、すべての非ゼロ要素を見つけることができます。
ので、
[RI, CI, V] = find(A);
% 2 1 -1
% 2 2 8
% 3 2 -5
% 1 3 9
EDIT:
私はあなたの目標は、MATLABでのコーディングを学ぶことでしたあなたのコメントから実現し、期待どおりのコードは動作しませんでしたなぜあなたは不思議に思うかもしれません。だからあなたに似たサンプルコードとともにこの問題を説明しようとします。
% Given:
A = [0 0 9; -1 8 0; 0 -5 0];
まず、手動でサイズをn = 3
と指定する代わりに、組み込みのsize
機能を使用することをおすすめします。
sz = size(A);
% note that this contains 2 elements:
% [number of rows, number of columns]
次に、我々は彼らの大きさを知っていただきたいと思い配列RI
、CI
とV
を初期化します。ゼロ以外の要素の数がわからないので、 には2つのオプションがあります。(1)ゼロ以外の要素の数以上であることが保証されている大きい数を選択します。たとえば、prod(sz)
。 (なぜそれは本当ですか?)。 (2)Matlabを初期化しないで、必要に応じて動的にメモリを割り当てます。私は以下のコードの2番目のオプションに従います。
% we'll keep a count of non-zero elements as we find them
numNZ = 0; % this will increment every time a non-zero element is found
for iCol = 1:sz(2) %column 1 to end
for iRow = 1:sz(1) %row 1 to end
if A(iRow,iCol)~=0
numNZ = numNZ + 1;
RI(numNZ) = iRow;
CI(numNZ) = iCol;
V(numNZ) = A(iRow,iCol);
end
end
end
disp([RI, CI, V])
% 2 1 -1
% 2 2 8
% 3 2 -5
% 1 3 9
意味がありますか?
[検索](https://www.mathworks.com/help/matlab/ref/find.html)?私はあなたが期待している出力がわからない。 – beaker
スパース(A)を書くのと同じ出力が必要です。 –
それでは、あなたは 'sparse'を使わないのですか? – beaker