如何在MATLAB上将1D数组转换为2D矩阵?

时间:2016-12-14 06:07:11

标签: arrays matlab matrix heatmap

我想用1D数组制作热图,这是我的计划;
假设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上从1D数组中获取2D矩阵?从中心减小值可以是线性的等等。

1 个答案:

答案 0 :(得分:0)

根据您的示例,您希望始终生成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)