1

行列があるので、各列には点の座標が含まれています。私はそれらのポイントを持っていると言います:

p1=(1,1)
p2=(1,2)
p3=(2,3)

その場合、マトリックスは次のようになります。

1 1 0
0 0 1
0 0 0

すべての座標は負ではありませんが、不合理です。座標に10^15(オクターブの最大精度)の係数を掛けて、行列を次の関数に渡しました。

function MAT = transfer(pairs)
  for i = 1:length(pairs)
      x = round(pairs(i,1));
      y = round(pairs(i,2));
      MAT(x,y) = true;
  end
end

残念ながら、エラーが発生します。添え字のインデックスは正の整数または論理値である必要があります。私はそれらを丸めて、それらがポジティブであるため、問題が何であるかわかりません。誰かが私が問題を見つけるのを手伝ってくれるか、変換を行うための別の方法を提供してくれたら嬉しいです、私は感謝します。
シャヨル

4

2 に答える 2

1

座標の一部がゼロに丸められている可能性があります。これは、そのエラーが発生する 1 つの方法です。
丸めた後、ペアの値のいずれかがゼロに等しいかどうかを確認します。

私が目にするもう 1 つの問題は、10^15 x 10^15 の密行列を生成できることです。for ループの代わりに、スパース行列を使用して MAT を生成することをお勧めします。例えば

MAT = sparse(round(pairs(:, 1)), round(pairs(:, 2)), true(rows(pairs), 1))
于 2013-01-31T16:42:21.600 に答える
0

ここでの問題は単純です。Octave の行列はベクトルとして格納されます。使用している 1 次元インデックスはオクターブの最大精度内ですが、これは 2D 行列であり、最終エントリの実際のインデックスは 10^30 のオーダーになり、大きすぎます。

小さい乗数を使用してみてください。10^15 ではなく 10^7 かもしれません。ただし、おそらくまだスペースが不足する可能性があるため、スパース マトリックスを使用することもお勧めします。

于 2013-03-17T04:18:06.750 に答える