我有一个矩阵,因此每列包含一个点的坐标。说我有这些要点:
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
答案 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。但是,你可能仍然会用完空间,所以我也建议使用稀疏矩阵。