【问题标题】:Is there a way to optimize my code for converting from an array to a 2d coordinate system?有没有办法优化我的代码以从数组转换为二维坐标系?
【发布时间】:2019-11-26 13:33:02
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 您的问题/代码的意图不是很清楚。你真的需要grid 表还是只是在获取矩阵a 的过程中的辅助? (另外,nloc 是整数还是双精度值?如果是第二个,则网格不只包含整数。)
  • 扩展上述评论,请编辑您的问题以澄清您是否需要grid,不要只在cmets中回答。此外,请注意,当您提供一个最小且可重现的示例时,我们总是更容易为您提供帮助:MRE

标签: matlab matrix optimization assign


【解决方案1】:

假设您不需要 grid 表,并且您的枚举是列主要的(对于 9 元素 x,您的第 4 个元素应分配在 a 矩阵的位置 (1,2) ) 你可以在一行中做到这一点:

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

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

【讨论】:

  • 谢谢!我没有听说过重塑功能。我能够将代码简化为: dim = sqrt(x.raycount(1)); table1 = zeros(1,x.raycount(1));对于 i = 1:height(x) table1(x.index(i)) = x.nloc(i);结束 a = reshape(table1,dim,dim);
  • 欢迎您。我想我误解了,所以在线性索引中,下标是由 x.index 获得的。在这种情况下,请尝试以下方式:sideLength=sqrt(length(x.nloc));a = reshape(x.nloc(x.index(x.index)),[sideLength,sideLength]); 如果可以接受,我会将其合并到上述答案中。
  • @JacobShirley 您的问题得到解答还是还有什么问题?
猜你喜欢
  • 2020-08-07
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多