【问题标题】:How can I convert 1D array into 2D matrix on MATLAB?如何在 MATLAB 上将一维数组转换为二维矩阵?
【发布时间】:2016-12-14 06:07:11
【问题描述】:

我想用一维数组制作热图,这是我的计划;
假设有 4 个中心点,每个点都有数组,

[center #1, L U] = {0, 1, 2, 5, 10, 7, 4, 2, 1, 0} *L R U D = 左、右、上、下
[中心 #2, R U] = {0, 1, 1, 4, 12, 7, 5, 3, 2, 1}
[中心 #3,L D] = {0, 1, 3, 4, 11, 7, 4, 2, 1, 0}
[中心#4,R D] = {0, 1, 3, 6, 11, 6, 5, 3, 1, 1}
而当热图的第 5 个索引时,([#1]=10, [#2]=12, [#3]=11, [#4]=​​11) 热图需要像这张图一样。
Heatmap image
当第一个索引 ([#1]=0, [#2]=0, [#3]=0, [#4]=​​0)
并且只有右侧几乎有颜色时,还可以预测热图全是蓝色最后索引时为蓝色。 ([#1]=0,[#2]=1,[#3]=0,[#4]=​​1)

如何从 Matlab 上的一维数组中获取二维矩阵?从中心减小值可以是线性的或其他的。

【问题讨论】:

  • 我不明白你真正想要做什么。您有 4 个 10x1 阵列。好的,你得到的矩阵应该是什么样子的?
  • @Bernhard 我想将数组制作成热图视频,例如上面提到的,该视频的第一帧是 4 NxN 零矩阵,视频的第二帧是 4 NxN 矩阵,中心值为 1。 1 的值均匀地减少..
  • 还是不太清楚。您能否在您的问题中添加一个示例,说明 2D 矩阵(或至少部分矩阵)的外观。
  • 你能加一个minimal reproducible example吗?
  • 如果 N=5,Example,最后将每帧的这 4 个矩阵附加到每帧 10x10 的矩阵中

标签: arrays matlab matrix heatmap


【解决方案1】:

根据您的示例,您希望始终生成 4 n * n 矩阵,其中每个矩阵的中心点获取数组中的值,并且其所有 4 个邻居的值均递减,直到为零。我做对了吗?

这是否会创建您希望创建的四个矩阵之一?如果是这样,只需修改参数并制作四个矩阵并将它们绘制在一起

% your matrix size
size = 15

center =  (size + 1) / 2

center_value = 5

mat_a = zeros(size,size);
mat_a(center,center) = center_value;
%loop all values until zero
for ii=1:center_value -1
  current_value = center_value - ii;
  update_mat = mat_a;
  % loop over matrix, check if 4-neighbors non-zero
  for x =1:size
    for y =1:size
      if ( mat_a(y,x) == 0 )
        has_non_zero_neighbor = false;
        % case 1 
        if ( x < size) 
          if (mat_a(y,x+1) > 0)
             has_non_zero_neighbor = true; 
           endif
         endif
         % case 2
         if ( y < size) 
           if (mat_a(y+1,x) > 0)
             has_non_zero_neighbor = true; 
           endif
         endif
         %case 3
         if ( x > 1)
          if (mat_a(y,x-1) > 0)
             has_non_zero_neighbor = true; 
           endif
         endif
         % case 4
         if ( y > 1) 
          if (mat_a(y-1,x) > 0)
             has_non_zero_neighbor = true; 
           endif
         endif  

         %if non-zeros, update matrix item value to current value
         if (has_non_zero_neighbor == true)    
           update_mat(y,x) = current_value;
         endif 
      endif

    end
  end
  mat_a = update_mat;

end

figure(1)
imshow(mat_a./center_value)

【讨论】: