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

4 views (last 30 days)
Yasushi Chida
Yasushi Chida on 24 Jun 2022
Commented: Kojiro Saito on 26 Jun 2022
例えば、ワークスーペースで取り込んだデータ(時刻列+データ3列、合計4列)を
Double data[3,1000];
に格納したい。
  3 Comments
Kojiro Saito
Kojiro Saito on 26 Jun 2022
取り込んだデータは時刻の列とデータの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
のよう横向きのデータにしたいということでしょうか?

Sign in to comment.

Answers (1)

Atsushi Ueno
Atsushi Ueno on 26 Jun 2022
「エデ​ィター上のメモリー」とは、おそらく「関数ワークスペース」の事だと思います
  • 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 Comment
Atsushi Ueno
Atsushi Ueno on 26 Jun 2022
わざわざ推奨されない方法を説明するのではなく、安全な方法を説明すれば良いのですね。
こうやって引数として渡せば、安全で良い方法になります。
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

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!