• ベストアンサー

Matlabでforやifを使わずに条件に合う行番号の抜き出し方

仮にA=[1 0 1 0 0 1]の行ベクトルがあったとします。 forやifを使わずにAにおいて1が入っている行番号(この場合では1,2,5)を抜き出すにはどうしたらいいのでしょうか。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

index = find(A == 1); で大丈夫かと。

megusurino
質問者

お礼

迅速なご回答どうもありがとうございます。

関連するQ&A

  • 行を削除しても番号の変わらない方法

    エクセルで300行の表を作っています。 A列に1行づつ1~300まで番号をつけているのですが、 仮に100番のデータを行ごと削除したあと、 番号が飛ばず、元通りに1~299に 自動で詰めてくれる方法はありますか? よろしくお願いします。

  • pythonのif for文の処理を複数行書きたい

    C言語などはfor if文を使うとき if(条件式){ 処理 } for(条件式){ 処理 } など中括弧を使いますが、 pythonはカッコを使わず for 条件式: 処理 などと、中括弧を使いません。 しかし for 条件式: 処理1、 処理2, 処理3… などと言った処理を書くと、処理1だけがループされ、 if 条件式: 処理1、 処理2, 処理3… だと、処理1だけがifの対象になりますよね 処理1,2,3すべてがforやifの対象になるにはどういう書き方をすればいいんでしょうか。 「for if 複数行処理」などで検索しても、or andなど複数条件などがヒットして中々探せません

  • MATLABでの、1行完結のIF文の書き方について教えてください。

    MATLABでの、1行完結のIF文の書き方について教えてください。 if (i==1);data(~test1 | test2>10) = -9; end の一文で、iが "8" になったときにのみ、ここでエラーが発生してしまいます。 この文の意味は 「test1ではない または test2が10より大きい 場合、dataに-9を代入する」 だと理解しています。 test1は、test1=(test0<100); という一文の結果が入っています。実際には test1 ===> 100*100 logical (100より大きいので、FALSE) test2 ===> 200*200 double が入ります。 if (i==1);data(test0>100 | test2>10) = -9; end と書き直して、両方 double にしてもやはりエラーになりました。 条件を複数記述する書き方が間違っているのでしょうか。 いろいろ試したもののうまくいかず困っています。 アドバイスをいただけましたら助かります。 宜しくお願い致します。

  • DOSコマンドのforで空白行をスキップしない

    DOSコマンド(バッチ)で、ファイルの4行目から読み込んで順に処理し、 空白行が見つかったらそこで処理ループを抜けて処理を終了させたいのですが、 FOR /Fは空白行を読み飛ばしてしまうため、やりたい事ができません。 FOR /F "SKIP=4" %%A IN (file) DO ( IF "%%A" == "" GOTO :OUT ・・・処理・・・ ) :OUT forで空白行をスキップしないようにするか、代替法があれば教えていただけないでしょうか。 よろしくお願いいたします。

  • Calcで行を挿入した時に行番号がずれる

    Open OfficeのCalcで商品の管理をしています。 それぞれの行の先頭には商品の通し番号を表示するセルがあります。 これは商品名を入力すると自動で表示されるようになっています。 例えば、2商品目であると「=IF(B2="","",A1+1)」という式が入っています。 つまり、2行目の商品名が空の時は、何も表示していなくて、 商品名を入力すると上の行の商品番号+1が自動で表示されるという式です。 問題なのは、時々入力し忘れた商品を後から行を増やして挿入したいという場合です。 行の挿入をすると、この商品番号が飛んでしまいます。 今の解決策としては、商品番号の一番上の式を一番下までコピーし直すことで解決しています。 しかし、行の数が増えるに従ってこの作業が非常に面倒になります。 何とか行を増やしても商品番号の数式が狂わない方法はないでしょうか? よろしくお願いいたします。

  • 条件による行挿入VBAの統合

    Bookごとのデータの内容により次の3つをその都度使い分けていますが これをひとつのVBAに統合したいのですが書き方を教えてください。 (当方詳しくないのでこのVBAも教えられたままのもので自作ではありません) ※A列データのうちタイトル行には■を先頭に入れてあります。 ●「■」があればすべて分割(■タイトルの上の行に1行挿入) Sub 全分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If Next End Sub ●タイトルに(1)または(2)が含まれる場合は (1)の上で分割(■の上の行に1行挿入)、(2)のあるA列はセル消去 Sub かっこ2有り分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "C").ClearContents End If If InStr(Cells(r, "A").Value, "(1)") > 0 Then Rows(r).Insert End If Cells(r, "A").ClearContents End If Next End Sub ●上記混在の場合(かっこありタイトルとかっこなしタイトルが混在) Sub 混在分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "A").ClearContents End If If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If End If Next End Sub ※かっこ有りに(3)もある場合、(2)と同じ処理 3つを統合した場合の分類のルール A列に■のあるタイトルの処理 ■のあるタイトルごとにタイトルの上に1行挿入 ただしタイトルに(2)(3)が含まれる場合は、上に行挿入せずそのタイトル部分(A列)のセル消去 A列の状況 ■タイトル データ1 データ2 データ3 ■タイトル(1) データ1 データ2 データ3 ■タイトル(2) データ4 データ5 データ6 ■タイトル データ1 データ2 データ3 A列の処理状況 (行挿入) ■タイトル データ1 データ2 データ3 (行挿入) ■タイトル データ1 データ2 データ3 (空白) データ4 データ5 データ6 (行挿入) ■タイトル データ1 データ2 データ3 なおデータの数字(連番)はD列に入れてありますが、 上記ルールにより■のあとや(2)(3)のとき同一タイトルなら連番にしてあるので この1の行を分割の判定としてもいい Office2013/Windows7

  • 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 よろしくお願いします

  • 【ExcelVBA】IF条件を満たしているのに、IF条件のところで止まってしまう

    Sub test1() 変数1 = IsEmpty(Range("C1")) If Range("A1") > 0 And Range("B1") = 0 And 変数1 = True Then   test2 End If End Sub 止まったときのデバッグでの表示は Range("A1")は「100」(セルの中身) Range("B1")は「0」(セルの中身) 変数1はRange("C1")がエラー表示なので「True」 すべての条件を満たしているのですが、 IF条件のところで止まってしまいます。 (IF条件のところの1行が黄色くハイライトになっている状態) 止まったデバッグの後に、F5を押して実行させると、 IF条件の続きから実行されて、test2が実行されて処理が終了します。 何で、IF文のところで一度止まってしまうのかわかりません。

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub

  • エクセル IF関数 条件を満たす行に印をつける

    A1:J30までにランダムな数値が入力されている表があります。M1:N4には検索値を入力できる箇所があり、条件に該当する行があればK列に○を付ける、ということがしたいです。その条件は、 (1)M1かN1に該当する (2)M2かN2に該当する (3)M3かN3かM4かN4に該当する この3条件のすべてを満たす行があればK列に○です。 いろいろ調べて、IF関数とsumproductを組み合わせてやってみたのですが、正しい結果にならずお手上げ状態です。(ちなみにこれ↓長すぎなのもネック。。。) =IF(AND(SUMPRODUCT((A1:J1=$M$1)+(A1:J1=$N$1))>=0,SUMPRODUCT((A1:J1=$M$2)+(A1:J1=$N$2))>=0,SUMPRODUCT((A1:J1=$M$3)+(A1:J1=$N$3)+(A1:J1=$M$4)+(A1:J1=$N$4)>=0)),"○","") IF関数でなくてもできれば何でも良いので、教えてください。 よろしくお願いいたします。