How to find even positioned numbers in a vector or matrix.

3 ビュー (過去 30 日間)
DJ V
DJ V 2016 年 11 月 8 日
コメント済み: Image Analyst 2016 年 11 月 8 日
Hi, if I have a matrix, say, [1 2 3; 4 5 6] and I want the 2,2 position and all even number positions within it, I can write a line of code that will produce "5" as the answer. for a single row vector [1 2 3 4 5 6] there are no even numbered row and column positions, so nothing should be returned. I can send it a matrix M, and ask for M(2,2:2:end) but that won't work for the single row vector, I get an error, and it should return nothing. How do I do this?

採用された回答

Thorsten
Thorsten 2016 年 11 月 8 日
編集済み: Thorsten 2016 年 11 月 8 日
if size(M,1) > 1 & size(M,2) > 1
res = M(2,2);
else
res = [];
end
  4 件のコメント
DJ V
DJ V 2016 年 11 月 8 日
Thanks but I can't use "if" statements. No tests.
Image Analyst
Image Analyst 2016 年 11 月 8 日
Huh? Why on earth not??? What a bizarre limitation you're putting on yourself!

サインインしてコメントする。

その他の回答 (1 件)

Guillaume
Guillaume 2016 年 11 月 8 日
M(2:2:end, 2:2:end)
will work for both vectors and matrices (and of course return empty for vectors).
To extend to any number of dimensions:
dimidx = arrayfun(@(dimsize) 2:2:dimsize, size(M), 'UniformOutput', false);
[dimidx{:}] = ndgrid(dimidx{:});
out = reshape(M(sub2ind(size(M), dimidx{:})), 1, [])

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by