Octave 如何将一组点转换为矩阵

Octave 如何将一组点转换为矩阵,octave,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(pair

我有一个矩阵,所以每列包含一个点的坐标。假设我有以下几点:

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
不幸的是,我得到了一个错误-下标索引必须是正整数或逻辑数。我不知道问题出在哪里,因为我把它们四舍五入,结果是肯定的。如果有人能帮我找到问题,或提供另一种方法进行转换,我将非常高兴,我将不胜感激。

沙约尔

您的某些坐标可能会舍入为零。这是获得该错误的一种方法。
我会检查一下,在四舍五入后,你们的两个值中是否有一个等于零

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

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

有些坐标可能会舍入为零。这是获得该错误的一种方法。
我会检查一下,在四舍五入后,你们的两个值中是否有一个等于零

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

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

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


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

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


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

我检查了,四舍五入后没有一个坐标为零。我还尝试了稀疏函数,得到了相同的错误。我检查了,四舍五入后没有一个坐标为零。我还尝试了稀疏函数,得到了相同的错误。