2

という名前のかなり大きなベクトルがありblenderます。より大きい(無関係)n要素を抽出しました。今、私の難しさは次のとおりです。blenderx

21 x nBlender の各要素に加えて、前に 10 個、後に 10 個の ( ) 行列を作成しようとしています。

element=find(blender >= 120);

私は次のバリエーションを試しています:

for i=element(1:end)
    Matrix(i)= Matrix(blender(i-10:i+10));
end

次に、Enter キーを押した時点で行列の 1 つの列をプロットします。この 2 番目の部分は後で理解できますが、Matrix の作成を手伝っていただければ幸いです

ありがとう

4

2 に答える 2

6

まず、配列の「論理インデックス」を使用できます。これは、論理式を使用してベクトルをアドレス指定します。ではblender = [2, 302, 35, 199, 781, 312, 8]、次のようになります。

>> b_hi = blender(blender>=120)
b_hi =
       302  199  781  312

次に、 のように配列を連結できますb_padded = [1, 2, b_hi, 3, 4]。が列ベクトルの場合b_hiは、コンマの代わりにセミコロンを使用します。

reshape第 3 に、結果のベクトルを行列に変換できる関数があります。doc reshape詳細をお伝えします。たとえばb_padded、2 行 4 列の行列に変換するには、次のようにします。

>> b_matrix = reshape(b_padded, 4, 2)
b_matrix =
           1   302   781     3
           2   199   312     4

しましょう。これは、for ループなしですべてのジョブを実行できることを意味します。の結果を転置するreshape(b_padded, 2, 4)と、別の可能な 2 行 4 列の行列が得られることに注意してください。Aによって行列の転置を取得しA'ます。どれが欲しいかがわかります。

于 2013-01-16T19:40:28.773 に答える
4

新しい行列を作成し、Matlab が 2D 行列の列に割り当てられていることを認識できるように、2 つのインデックスを使用する必要があります。

NewMatrix = zeros(21, length(element));
for i = 1:length(element)
    k = element(i);
    NewMatrix(:,i)= Matrix(blender(k-10:k+10));
end
于 2013-01-16T19:36:46.877 に答える