有没有一种方法可以优化我的代码,以便从数组转换为二维坐标系?

时间:2019-07-17 16:32:07

标签: matlab matrix optimization assign

我正在尝试在Matlab中制作热图。从我的程序中传出的值存储在一个大的一维数组中。因此,第9个元素数组上的第4个元素点将是(1,2),第9个点将是(3,3)。(1,1)将是第一个元素。值存储在每个元素中。

一旦在matlab中,我想将该数组转换为矩阵,以便我可以使用imagesc()来显示数组的每个元素在x,y坐标系中的高度或高度。

我的代码可以运行,但是我觉得执行该任务花费的时间太长。

在我的代码中,x.index是数组下标(x.index(1)将是代码输出的数组的第一个元素。)

我传入数组中元素的总数,并取平方根以得到x和y边界。我将此变量命名为dim。

grid和x是包含整数的表。

dim = sqrt(x.raycount());
grid = table();

a = zeros(dim,dim)

for i = 1:height(x)
    rem = mod(x.index(i),dim);
    grid.yvalue(i,1) = (x.index(i)-rem)/dim;
    grid.xvalue(i,1) = rem;
    nloc = x.nloc(i)
    grid.nloc(i,1) = nloc;
    a(grid.xvalue(i),grid.yvalue(i)) = grid.nloc(i);
end

1 个答案:

答案 0 :(得分:0)

假设您不需要grid表,并且由于枚举是以列为主的(对于9元素的x,应将第4个元素分配在第(1,2)个位置a矩阵)中,您可以按以下方式完成操作:

sideLength=sqrt(length(x.nloc));
a = reshape(x.nloc(x.index(x.index)),[sideLength,sideLength]);

这是如果您确定有正方形网格。如果您有矩形网格,请使用[sidelength1,sidelength2]作为reshape命令的第二个参数。