条件に該当する行列をどんどん連結していきたい

3 views (last 30 days)
Y.Suzuki
Y.Suzuki on 15 Dec 2017
Answered: Y.Suzuki on 18 Dec 2017
演算処理で条件を満たす行列 ch0(:,23)を ch(:,23)にどんどん垂直方向に連結したいため ch(:,:) = vertcat(ch(:,:),ch0(:,:)) のようなイメージで、1つの行列 chに連結させたいです。ch0は、どんどんファイルを読み込んで条件を満たせば連結し、満たさなければ廃棄するといった処理になります。ch0の列は23列で固定されていますが、行数は、まちまちのため、ch0(:,23)になります。chは、どんどん足されますので、行数は膨れあがっていきます。ch(:,23)です。 ちなみに、上記のようなステートメントでは、”添字による代入の次元が一致しません”とエラーになります。

Accepted Answer

Takuji Fukumoto
Takuji Fukumoto on 16 Dec 2017
ch(:,23) = vertcat(ch(:,23),ch0(:,23));
の書き方をするとエラーがでているのかと思いますが、 仮にch,ch0が10行だとすると10行のところに10+10の20行のデータを書き込もうとしていることになるので、 エラーがでます。 例えば下記のようにch0分行数を追加するのはいかがでしょうか。。
len = numel(ch(:,23))+numel(ch0(:,23));
ch(1:len,23) = vertcat(ch(:,23),ch0(:,23));
都度行列サイズを変更していくとメモリ領域を取り直すので、 データが大きいとスピードが遅くなるかもしれません。 23列だけのベクトルにして扱い、 おおよその行数がわかっていればchにあらかじめ大きなサイズをとっておくことも検討されると良いかと思います。

More Answers (1)

Y.Suzuki
Y.Suzuki on 18 Dec 2017
ありがとうございました。うまく連結できるようになりました。

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!