我正在尝试在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
答案 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
命令的第二个参数。