
Matlab のループ文について質問です。
(プログラミングも) Matlab初心者なのですが、あるプログラム内においてループを作りたく、試行錯誤を繰り返していますが、上手くいきません。
class1_1 = numel(find(Z1==1));
class1_2 = numel(find(Z1==2));
class2_1 = numel(find(Z2==1));
class2_2 = numel(find(Z2==2));
このような関係式が、Z3、Z4、・・・・と増えていくと、それに従って式の数も増えつづけます(Z15まであります)。
class1_1 = numel(find(Z1==1));
class1_2 = numel(find(Z1==2));
class1_3 = numel(find(Z1==3));
class1_4 = numel(find(Z1==4));
class2_1 = numel(find(Z2==1));
class2_2 = numel(find(Z2==2));
class2_3 = numel(find(Z2==3));
class2_4 = numel(find(Z2==4));
class3_1 = numel(find(Z3==1));
class3_2 = numel(find(Z3==2));
class3_3 = numel(find(Z3==3));
class3_4 = numel(find(Z3==4));
class4_1 = numel(find(Z4==1));
class4_2 = numel(find(Z4==2));
class4_3 = numel(find(Z4==3));
class4_4 = numel(find(Z4==4));
これを上手くループを使って、回すことができないだろうかと思っています。
なにか良いアイデアがありましたらば、是非アドバイスをお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
単純に考えれば、Zがn個とすると
Z = {Z1;Z2;...;Zn};
for i = 1:n
for j = 1:n
class(i, j) = numel(find(Z{i}==j));
end
end
でしょうか。
No.1
- 回答日時:
Zが15まであるということですが、ご質問のように、ループ処理を使って、しかも出力側の変数名をすべて異なった名前にしたいなら、eval関数を使うしか方法はないかと思います。
ただ、ご質問のとおりにZ=15まで処理をすると変数が300個以上できますね。workspace内に300個以上の変数ができるのはPCのスペックが相当よくないと、その後の処理に時間がかかるか、あるいはメモリ不足でスクリプトが進まない可能性が出てくると思いますので、cellを使って処理した方が良いかと思います。
まずはZ1からZ15をひとつの変数(cell)に収めます。
次に空セルを1*15の配列で作成します。
{1,1}のセルにはZ=1の結果が1*1で、{1,2}のセルにはZ=2の結果が2*2で、{1,5}のセルにはZ=5の結果が5*5で・・・というようにループ処理で結果をcellに入れていきます。
もしもfind(Z==x)の結果がベクトルならば、cellの中にさらに{x*x}でcellを作れば解決します。
スクリプトは以下のような感じです。
x=cell(1,15);
for i=1:15;
xx = cell(i,i);
for j=1:i;
for k = 1:i;
xx(j,k)=find(z{j}==k);
end
end
x(i)=xx;
end
-------
上のスクリプトは、find関数の結果がベクトルだった場合のものなので、もしもfindの結果が一つの数値に決まる場合にはわざわざcellの中にcellを作らない方がいいです。
もし、どうしてもすべてを別の名前の変数にしたい場合には、eval関数を使います。しかしこれまで書くとかえってややこしくなるので、どうしてもという場合にはその旨要求して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) マクロで特定日より1日前の日を求めたい 6 2022/05/08 09:23
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- 英語 ()内に入るのはどれですか? 高校の授業で出された問題です。 [1]The cake is cove 3 2022/12/13 22:40
- 英語 節を列挙する例示表現について 2 2022/08/15 13:52
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonでファイルのコメント行...
-
スパゲティソースについて
-
エクセルのVBAで最終行までルー...
-
VB.NETでFTPプログラム
-
ループフリー
-
UWSCの終了の仕方
-
VB.NETで素因数分解のプログラ...
-
StatementとResultSetのclose()...
-
先ほど質問したほぉかべです
-
19歳です 普段、動くことも人と...
-
レインボー色ってどうやって表...
-
イベントの発生を待つ
-
vb.netからエクセル関数書き込み
-
乱数の桁数指定、または範囲指定。
-
エクセルでマクロを組みたいで...
-
VB2010でCSVファイルの読み込み
-
画面を強制的に再描画させる方法
-
C#で別のフォームのprogress ba...
-
データベースをEOFまでループさ...
-
配列から網羅的な文字列を生成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
流れ図(フローチャート)が分か...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
VBAでの一時停止と再開の方法
-
乱数の桁数指定、または範囲指定。
-
VBA for i=1 to lastrow
-
VBAで3秒だけ時間を止めたい
-
vb.netです。2次元配列の要素を...
-
エクセルの当番表を作っていま...
-
vb.netからエクセル関数書き込み
-
DOSコマンドのループ内のTIMEコ...
-
「偶数・奇数の和」のフローチ...
-
GIFアニメをループさせたくない
-
Do whileでExitせず、ループの...
-
VB2010でCSVファイルの読み込み
-
【VBA】全て空白のセルの列の非...
-
アクティブセルから、A列最終行...
おすすめ情報