ワークスーペースで取り込んだデータをエディター上のメモリーに格納するサンプルプログラムが欲しい。
조회 수: 2 (최근 30일)
이전 댓글 표시
例えば、ワークスーペースで取り込んだデータ(時刻列+データ3列、合計4列)を
Double data[3,1000];
に格納したい。
댓글 수: 3
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
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] % テスト用データ
test(); % 下記のtest()を実行
function test()
data = evalin('base','count');
data = double(data(:,2:4)')
end
댓글 수: 1
Atsushi Ueno
2022년 6월 26일
わざわざ推奨されない方法を説明するのではなく、安全な方法を説明すれば良いのですね。
こうやって引数として渡せば、安全で良い方法になります。
load count.dat
count = [(1:size(count,1))' count/10]; % テスト用データ
test(count(:,2:4)'); % 下記のtest()を実行、test(data)にcountを渡す
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!