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

您的某些坐标可能会四舍五入为零。这是您将得到该错误的一种方式。
我会检查四舍五入后是否有任何成对的值为零。

我看到的另一个问题是你可以生成一个 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 的矩阵存储为向量。虽然您使用的一维索引在倍频程的最大精度范围内,但它是一个二维矩阵,最终条目的真实索引将是 10^30 的数量级,太大了。

尝试使用较小的乘数。也许是 10^7,而不是 10^15。不过,您可能仍然会用完空间,所以我还建议使用稀疏矩阵。

于 2013-03-17T04:18:06.750 回答