したがって、3 列目の 6 つの要素すべてを 6 つの要素のベクトルに入れたいと思います。どうすればいいですか?
質問する
42 次
2 に答える
1
(:) 演算子を使用して、nD 行列を 1 つのベクトルに折りたたむことができます。あなたの例では、次のようにします。
mat = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
vec = mat(:);
于 2013-03-12T04:21:59.047 に答える
0
まず第一に、比較演算子を使用して間隔を比較することはできません。このコードを実行してみることをお勧めします。
x = 1:10;
4 < x < 7
私のシステムでは、答えが得られます
ans =
1 1 1 1 1 1 1 1 1 1
これは、あなたが望むものではないと思います。解決策は、このように条件を分割することです
(4 < x) & (x < 7)
与える
ans =
0 0 0 0 1 1 0 0 0 0
予想通り。
さて、実際の質問に戻ります。結果のベクトルに必要な要素の数がわかっている場合は、次を使用できますreshape
。
mask = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
x = nanmean(seals(mask, :, :));
v = reshape(x(:, 3, :), 6, 1);
ただし、この場合、検索基準を使用して選択する値を見つけているため、最終的なベクトルの長さが事前にわからない可能性があります。(:)
別のオプションは、最初に必要な値を取得してから、次のようにコロン演算子を使用してそれらをベクトルに再形成することです。
mask = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
x = nanmean(seals(mask, :, :));
y = x(:, 3, :);
v = y(:);
どちらの場合も、読みやすさを向上させるために別のセレクション マスクを導入しました。
于 2013-03-13T15:25:09.297 に答える