如何将一组点转换为矩阵

时间:2013-01-31 15:36:26

标签: octave

我有一个矩阵,因此每列包含一个点的坐标。说我有这些要点:

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

不幸的是,我得到一个错误 - 下标索引必须是正整数或逻辑。我不知道问题是什么,因为我把它们弄圆了,它们是积极的。如果有人能帮助我找到问题或提供另一种转换方式,我会很高兴,我将不胜感激。
Shayol

2 个答案:

答案 0 :(得分:1)

您的一些坐标可能会舍入为零。这是您获得该错误的一种方式 我会在四舍五入后检查你的任何一对值是否等于零。

我看到的另一个问题是你可以生成一个10 ^ 15 x 10 ^ 15的密集矩阵。我建议使用稀疏矩阵来生成MAT,而不是for循环。例如

MAT = sparse(round(pairs(:, 1)), round(pairs(:, 2)), true(rows(pairs), 1))

答案 1 :(得分:0)

问题在这里很简单。 Octave的矩阵存储为向量。虽然您使用的单维索引在八度音程的最大精度范围内,但它是一个2D矩阵,最终条目的真实索引将是10 ^ 30的数量级,太大了。

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