ワークスーペースで取​り込んだデータをエデ​ィター上のメモリーに​格納するサンプルプロ​グラムが欲しい。

2 ビュー (過去 30 日間)
Yasushi Chida
Yasushi Chida 2022 年 6 月 24 日
コメント済み: Kojiro Saito 2022 年 6 月 26 日
例えば、ワークスーペースで取り込んだデータ(時刻列+データ3列、合計4列)を
Double data[3,1000];
に格納したい。
  3 件のコメント
Yasushi Chida
Yasushi Chida 2022 年 6 月 26 日
プログラムをデバックしてるmファイル?
Kojiro Saito
Kojiro Saito 2022 年 6 月 26 日
取り込んだデータは時刻の列とデータの3列で合計4列とのことですが、データの個数(行数)は1000あるのでしょうか。
また、dataという変数で3行×1000列にしたいということですが、データ1列目、2列目、3列目のデータを
例:
変更前
data1 data2 data3
1 2 3
2 4 6
...
1000 2000 3000
変更後
data1: 1, 2, ..., 1000
data2: 2, 4, ..., 2000
data3: 3, 6, ..., 3000
のよう横向きのデータにしたいということでしょうか?

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

回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2022 年 6 月 26 日
「エデ​ィター上のメモリー」とは、おそらく「関数ワークスペース」の事だと思います
  • mファイルに関数を作らず命令文を書くと、ワークスペースの変数にアクセス出来ます(コマンドラインと同様)
  • mファイルに関数を作りその関数内に命令文を書いてもワークスペースの変数にアクセス出来ません
  • 上記を言い換えると「関数ワークスペースから(ベース)ワークスペースにアクセスする事が出来ません」
  • evalin関数で上記のアクセスが可能になります
  • 意図して壁を設けている所を突破する方法なので、evalin関数の使用は推奨されません
  • evalin関数で壁を貫いてアクセスするのではなく、関数の引数を通じてデータを明示的に渡すべきです
例:ワークスペースにcount(時刻列+データ3列、合計4列)(長さは1000ではなく24)が在る
⇒これを関数ワークスペース(test()関数)からアクセスし、同関数内のローカル変数dataに格納する
load count.dat
count = [(1:size(count,1))' count/10] % テスト用データ
count = 24×4
1.0000 1.1000 1.1000 0.9000 2.0000 0.7000 1.3000 1.1000 3.0000 1.4000 1.7000 2.0000 4.0000 1.1000 1.3000 0.9000 5.0000 4.3000 5.1000 6.9000 6.0000 3.8000 4.6000 7.6000 7.0000 6.1000 13.2000 18.6000 8.0000 7.5000 13.5000 18.0000 9.0000 3.8000 8.8000 11.5000 10.0000 2.8000 3.6000 5.5000
test(); % 下記のtest()を実行
data = 3×24
1.1000 0.7000 1.4000 1.1000 4.3000 3.8000 6.1000 7.5000 3.8000 2.8000 1.2000 1.8000 1.8000 1.7000 1.9000 3.2000 4.2000 5.7000 4.4000 11.4000 3.5000 1.1000 1.3000 1.0000 1.1000 1.3000 1.7000 1.3000 5.1000 4.6000 13.2000 13.5000 8.8000 3.6000 1.2000 2.7000 1.9000 1.5000 3.6000 4.7000 6.5000 6.6000 5.5000 14.5000 5.8000 1.2000 0.9000 0.9000 0.9000 1.1000 2.0000 0.9000 6.9000 7.6000 18.6000 18.0000 11.5000 5.5000 1.4000 3.0000 2.9000 1.8000 4.8000 1.0000 9.2000 15.1000 9.0000 25.7000 6.8000 1.5000 1.5000 0.7000
function test()
data = evalin('base','count');
data = double(data(:,2:4)')
end
  1 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 6 月 26 日
わざわざ推奨されない方法を説明するのではなく、安全な方法を説明すれば良いのですね。
こうやって引数として渡せば、安全で良い方法になります。
load count.dat
count = [(1:size(count,1))' count/10]; % テスト用データ
test(count(:,2:4)'); % 下記のtest()を実行、test(data)にcountを渡す
data = 3×24
1.1000 0.7000 1.4000 1.1000 4.3000 3.8000 6.1000 7.5000 3.8000 2.8000 1.2000 1.8000 1.8000 1.7000 1.9000 3.2000 4.2000 5.7000 4.4000 11.4000 3.5000 1.1000 1.3000 1.0000 1.1000 1.3000 1.7000 1.3000 5.1000 4.6000 13.2000 13.5000 8.8000 3.6000 1.2000 2.7000 1.9000 1.5000 3.6000 4.7000 6.5000 6.6000 5.5000 14.5000 5.8000 1.2000 0.9000 0.9000 0.9000 1.1000 2.0000 0.9000 6.9000 7.6000 18.6000 18.0000 11.5000 5.5000 1.4000 3.0000 2.9000 1.8000 4.8000 1.0000 9.2000 15.1000 9.0000 25.7000 6.8000 1.5000 1.5000 0.7000
function test(data) % 関数に渡される情報を引数dataとして受け取る
data
end

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

カテゴリ

Help Center および File Exchangeワークスペース変数と MAT ファイル についてさらに検索

Community Treasure Hunt

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

Start Hunting!