ワークスーペースで取り込んだデータをエディター上のメモリーに格納するサンプルプログラムが欲しい。
2 views (last 30 days)
Show older comments
例えば、ワークスーペースで取り込んだデータ(時刻列+データ3列、合計4列)を
Double data[3,1000];
に格納したい。
3 Comments
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
のよう横向きのデータにしたいということでしょうか?
Answers (1)
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] % テスト用データ
test(); % 下記のtest()を実行
function test()
data = evalin('base','count');
data = double(data(:,2:4)')
end
1 Comment
Atsushi Ueno
on 26 Jun 2022
わざわざ推奨されない方法を説明するのではなく、安全な方法を説明すれば良いのですね。
こうやって引数として渡せば、安全で良い方法になります。
load count.dat
count = [(1:size(count,1))' count/10]; % テスト用データ
test(count(:,2:4)'); % 下記のtest()を実行、test(data)にcountを渡す
function test(data) % 関数に渡される情報を引数dataとして受け取る
data
end
See Also
Categories
Find more on ワークスペース変数と MAT ファイル 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!