1

行列 (A) の異なる行でパターン ([1 1] としましょう) を見つける変数を作成したいと考えています。もちろん、各行でこの文字列が同じ数だけ出現するわけではありません。

A = [ 0     0     0     1     1 
      1     1     1     0     0 
      0     1     0     1     1 
      1     1     1     0     0 
      0     1     0     0     1 
      1     0     1     1     1 
      0     1     0     1     0 
      1     1     1     0     1];

私はそれをできた:

for i = 1:n
    var(i,:) = strfind(A(i,:),[1 1]);
end

しかし、その場合、方程式の両辺は等しくなりません。

エラー: ???添字付きの代入次元が一致しません。

私は事前に割り当てようとします。マトリックス A の各行でこの文字列が出現する最大数 (50 としましょう) と思われるマトリックスを作成します。

for i = 1:n
    var(i, :) = NaN(1,50)
end

その後に前のコードが続きますが、これもダメです。

私も試しました:

for i = 1:n
    var(i,1:numel(strfind(A(i,:),[1 1])) = strfind(A(i,:),[1 1])
end

エラー: 等号の左側の式は、割り当ての有効なターゲットではありません。

これを行うにはどうすればよいですか?

私が期待する出力は、マトリックス var(i,:) であり、これらのパターンのそれぞれが発生するマトリックス内の位置を示します。1行だけでも問題なく動作します。

例えば:

var(1,:) = [1 2 5 8 10 22 48]
var(2,:) = [2 3 4 7 34 45 NaN]
var(3,:) = [4 5 21 32 33 NaN]

ありがとう!

4

1 に答える 1

1

最初の試行では、行の長さが異なるマトリックスを作成しようとしました。

var(i,:)2回目の試行では、事前に割り当てましたが、目的の結果をそこに配置しようとしたときに、を再定義して実行しました。

3 回目の試行では、残念ながら )左式の末尾に 1 つの括弧がありませんでした。

このコードは機能すると思われます (2 回目と 3 回目の試行で行ったこと、事前割り当てブラケットと固定ブラケットを使用):

var=NaN(1,50);
for i = 1:n
    var(i,1:numel(strfind(A(i,:),[1 1]))) = strfind(A(i,:),[1 1])
end
于 2013-07-07T09:30:18.917 に答える