• 締切済み

MATLABでのwhile文の条件について

MATLABでのwhile文の条件について いつもお世話になっております。 MATLABでwhile文を用いる際、その条件として行列中の特定の次元の値が存在するかどうかという条件を用いたいと考えています。 例えばsize(a)=(10 10 50)のaという画像データを読む際に、a(:,:,1)から順番に読み込んでいって a(:,:,50)で自動に止まるようなwhile文を作りたいと考えています。 つまりこの場合は順番に読み込んでいって、a(:,:,51)が存在しないならばwhile文が終了するようなプログラムを行いたいと考えております。 for文を用いればすぐだとは思いますが、どのようなデータにも入力引数なしで応用が出来ないかと思いましてご質問させていただきました。 もし以上の条件を満たす適当な関数などございましたら、ご一報いただけたらと存じます。

noname#136083
noname#136083

みんなの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.3

かなり前の質問なのでもう解決しているかもですが… もし読み込むファイルがどれなのか決まっているのであれば、 1つのフォルダに読み込む画像ファイルだけ入れておき、 D=dir(uigetdir); でそのフォルダを指定すれば Dがファイル数+2?(この+2は私も何なのかよくわかりません)行の 構造体配列になります。 ついでにこのDにはメンバとしてnameも入っているので、 a=zeros(10,10,length(D)-2); for k=1:length(D)-2; a(:,:,k)=imread(D(k).name); end; で全部読み込めると思います(ファイルの順番がどうなっているかはわかりません) 以上、ご参考までに。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

つまりaという変数に画像をたくさん読みたいということですか? while 画像がまだ存在するか  a(:,:,end+1) = imread(filename); end みたいなことですかね? ただ、このプログラムは非常にメモリ効率が悪いですし、遅いです。 前もって、画像が何枚あるかを調べておいて、 a = zeros(xsize,ysize,zsize); みたいにメモリを一気に確保するのがmatlabでの王道のやり方です。

noname#136083
質問者

お礼

rabbit_cat様、 はい、その様なプログラムを考えておりました。 ですがやはり前もって枚数を入力するほうがいいみたいですね! ありがとうございました^^大変勉強になりました! もしまた何かありましたらよろしくお願い致します。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

正直、何がやりたいのかがわからないです。 for j=1:size(a,3) end では駄目な点をもう少し説明してください。

noname#136083
質問者

お礼

rabbit_cat様、 ご返答ありがとうございます。 現在、MRIデータのような3次元の画像データ(x,y:座標、z:枚数)を読み込みたいと思っているのですが、 そのとき例えばimreadのみでは1枚分の画像しか読み込まれません。 そのためwhile文もしくはfor文を用いて500枚近くの画像データを一度に読み込みたいと思っております。 しかし読み込む前の時点ではaのサイズ(枚数方向のサイズ)が分かっていないためfor文では難しかったです。 前もって枚数を指定すればfor文で問題なく読み込みが行えると思いますが、枚数が常に一定のデータとは限らないため、枚数を指定しなくても正常に読み込みを行ってくれるプログラムを書きたいと思っておりました。 拙い文章で申し訳ありません。

関連するQ&A

  • MATLABとC++

    こんにちわ。資料を参考にしつつMATLABからC言語へ変換する作業をしているのですが、どちらに関しても初心者レベルで遅々としてはかどりません…。 分からないことの一つとして、MATLABは行列計算がしやすいがC言語はそうではないということからなのですが、MATLABで A = zeros(10,20,30) というのは次元10×20×30をもつゼロ行列 ということは分かったのですが、これは 数学で習う行列、2×2 や3×3など二次元な数字の並びを、三次元にまで拡張した表し方ということでしょうか?? また、上の式をC言語で書き表すとすると どのように書き表せるのでしょうか?どなたか分かるかた 教えていただければと思います。

  • matlabで条件をみたしたデータの総数を数えることは可能ですか?

    matlabで条件をみたしたデータの総数を数えることは可能ですか? 例として2×5の以下の行列 1 3 0 2 0 1 0 1 2 1 の一行目で0以上の値を持ったデータの総数を知りたいとき(答えは3) 初心者なのでわからないことだらけで困っています。 よろしくお願いします。 .

  • matlabで複数条件のif文を行列計算で行うには?

    matlabで複数条件のif文を行列計算で行うには? matlabではfor文などは行列計算で回したほうが高速化できると聞きました。 for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか? 自分のプログラムは以下のようなものです for i=1:100 for j=1:100 theta_kari=atan(abs(B(j,i))/abs(A(j,i))); if A(j,i)>=0&&B(j,i)>=0 theta(j,i)=theta_kari; elseif A(j,i)<0&&B(j,i)>=0 theta(j,i)=theta_kari+(pi/2); elseif A(j,i)<0&&B(j,i)<0 theta(j,i)=theta_kari+pi; elseif A(j,i)>=0&&B(j,i)<0 theta(j,i)=theta_kari+(pi/2*3); end end end よろしくお願いします

  • matlabのfor文でのデータ取り込み

    matlabを使って.xlsxファイルの要素を抜き出して配列にしたいと思っています。 例えば、 [S1, header]=xlsread('sample.xlsx','A1001:A1100') ここでS1にA3000からA3100まで取り込めますが、これをS2にはA1101からA1200と同様に S3,S4とfor文で取り込み最終的にS10まで行いたいです。そして、 P=[S10; S9; ・・・・S1] として一つの行列にしたいのですが、for文を使って簡単にできないでしょうか? 取り込みと、一つの行列にする部分の二つをfor文で書き表したいです。 よろしくお願いします。

  • while文の中にwhile文を書きたいのですが。。。

    while文の中にwhile文を書きたいのですが。。。 現在、下記ソースでプログラムを記述しております。 下記ソースですと、1回目のループのデータは抽出できるのですが、2回目のループだとデータが抽出できません。。 <? while($item0_3 = mysql_fetch_array($res0_3)){ ?> <tr> <td class="A"> <select name="work_partner_com[]"> <? while ($item5_2 = mysql_fetch_array($res5_2)) {?> <option value="<?=$item5_2["com_name"]?>"><?=$item5_2["com_name"]?></option> <? }?> </select> </td> <td class="B"> <select name="work_com[]"> <? while ($item5_3 = mysql_fetch_array($res5_3)) {?> <option value="<?=$item5_3["name"]?>"><?=$item5_3["name"]?></option> <? }?> </select> </td> </tr> <? } ?> 1回目のwhile文で、データーベースの指定したテーブルに格納されている数 2回目のwhile文で、データーベースの指定したテーブルに格納されているマスタデータ数 ご教授いただけますでしょうか。

    • ベストアンサー
    • PHP
  • while文を使った問題なのですが・・

    はじめまして。 C言語初心者です。 while文のところまでやっとたどり着きましたが、次の問題がどうしても解くことができません。 ********************** 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 ********************** #include<stdio.h> int main(void) { int a; scanf("%d", &a); while(a!==0){ printf("%d*\n", a); } } こんな感じでつくってみたのですが、whileの条件部分がさっぱり分かりません。 int a の数字文だけ、*で表示する、というのも方法が思いつきません。 アドバイス、お願いいたします。

  • MATLAB 並び替え

    MATLABについての質問です。 いま、以下のような行例A(2*2)があります 1 0.24 1 0.44 1 0.67 2 4.69 2 9.40 3 6.4 3 6.66 3 5.67 3 3.98 3 9.92 4 1.43 ...続く 即ち、行列Aは一列目に整数のインデックス1~100、2列目にあるデータが格納されています。これを、新しい行列Bに並び替えたいのです。行列Bは行方向にデータ、列方向にAの一列目のインデックス、という風にしたいです。具体的には、 0.24  4.69  6.4  1.43 0.44   9.40   6.66 0.67      5.67          3.98          9.92 です。どのように書けばもっともシンプルでしょうか? 質問の仕方が悪かったらごめんなさい。どうぞよろしくお願いいたします。

  • 【FORTRAN77】DO WHILE文 これで正しいの?

    まったくさわったことのないFORTRAN77の解読をさせられています。 次のような場合はどうなるのでしょうか? コンパイル・実行できる環境がないので、教えて下さい。 データ数5の実数型配列をA(5)とする。 マイナスのデータは必要ないので、データ数を、今の5つから、マイナスデータを引いた数字に変更したい。 (ここでは、データ数のみを変更するものとします) N = 5 A(1) = -3. A(2) = -5. A(3) = -1. A(4) = 5. A(5) = 3. の時、次の使い方は正しく動くの? DO WHILE (A(N) .LE. 0.) N = N - 1 END DO 最初のWHILEループ N = 1から見ていって、A(1)がマイナスだから、 Nが4になる。 次のWHILEループ ・N = 4になったから、A(4)を見る? ・それともちゃんと順番にA(2)を見る? WHILEループが終わったら、ちゃんとN = 2になっている?

  • matlabでfor文を使ってwork spaceの変数名を変えたい場

    matlabでfor文を使ってwork spaceの変数名を変えたい場合はどうすればよいですか? 例えばwork spaceにa1,a2,a3,a4,a5いう行列を持つ変数があり、 それぞれの行列から2行目を全部取り出したい場合どうすればよいですか? ファイル名ならfor文で作れるのですが、変数名にはfor文は使えないのでしょうか? ファイル名ならstrcatやnum2strを使って作れますが・・・。 どなたかご教授ください!

  • While文を使って配列の中身を全て取り出すには

    よろしくお願いします。 $data=file("./log.txt"); echo "$data[0]<br>"; echo "$data[1]<br>"; echo "$data[2]<br>"; -----表示結果----- おはよう こんにちは こんばんは ------------------ 上記のプログラムを、行数が多いことを想定して While文を使い$dataの中身が無くなるまで log.txtのデータを全て表示するようにしたいと考えているのですが、 While文の条件部分をどのように記述いていいのか困ってます。 ご指導お願いします。

    • ベストアンサー
    • PHP