Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 这是什么:uint8((双(weather1618)。/maxv)。*50);?_Arrays_Image_Matlab_Matlab Figure_Uint8t - Fatal编程技术网

Arrays 这是什么:uint8((双(weather1618)。/maxv)。*50);?

Arrays 这是什么:uint8((双(weather1618)。/maxv)。*50);?,arrays,image,matlab,matlab-figure,uint8t,Arrays,Image,Matlab,Matlab Figure,Uint8t,这段代码(几乎)满足了我的要求,但我不明白它怎么会这么简单。有人能解释一下这个代码是怎么工作的吗 FIY,weather1618是一个384x384阵列,范围从-76到-30。maxv的值为-30 mapped_array = uint8((double(weather1618) ./ maxv) .* 50); image(mapped_array); 为什么.*50.*100给出不同的图像,而.*100.*500.*1000是相同的 如果我直接做的话 image(weather1618

这段代码(几乎)满足了我的要求,但我不明白它怎么会这么简单。有人能解释一下这个代码是怎么工作的吗

FIY,weather1618是一个384x384阵列,范围从-76到-30。maxv的值为-30

mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
image(mapped_array);
为什么.*50.*100给出不同的图像,而.*100.*500.*1000是相同的

如果我直接做的话

 image(weather1618);
image(weather1618);
我只会得到一张蓝色的照片

这段代码(几乎)实现了我想要的功能,但我不明白它是如何实现的 就这么简单。有人能解释一下这个代码是怎么写的吗 工作

请注意,这类问题通常是。但是,由于您已经缩小了不理解的代码行,我将向您解释

你提到:

FIY,
weather1618
是一个384x384阵列,范围从-76到-30。 而
maxv
的值为-30

mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
image(mapped_array);
第一行代码:

mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
image(mapped_array);
调用以下函数/运算符:

  • (功能)-转换为双精度
  • (运算符)-按元素划分
  • (运算符)-按元素乘法
  • (函数)-转换为8位无符号整数
发生了什么事:

  • double(weather1618)
    weather1618
    矩阵转换为,因此矩阵的值现在是十进制数。在MATLAB中,对于负值,double可以表示从-1.79769e+308到-2.22507e-308的数字,对于正值,double可以表示从2.22507e-308到1.79769e+308的数字()。进行此转换的可能原因是为了避免在步骤2中出现错误(下面解释)
  • /maxv
    将矩阵的每个元素除以-30。这将翻转矩阵中每个元素的符号,并将数据缩放1/30倍。由于矩阵在上一步中转换为double,因此除法后获得的数组也将是double类型,并且它将包含十进制数
  • *50
    将矩阵的每个元素乘以50。这将按50倍的比例缩放数据。乘法后获得的数组将继续是double类型,与前面一样
  • uint8(…)
    将矩阵的类型从double转换为uint8(),因此矩阵的值现在将在0到255之间
  • 第二行代码:

    mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
    
    image(mapped_array);
    
    调用函数以显示在步骤4中获得的阵列的图像

    如果我直接做的话

     image(weather1618);
    
    image(weather1618);
    
    我只会得到一张蓝色的照片

    好发现!之所以只看到蓝色图像,是因为默认情况下,
    图像
    功能不使用中的全部颜色范围,因此即使图像中有信息,也无法区分它,因为它不是使用全部颜色范围显示的。另一方面,该函数默认使用全部颜色范围

    看看我做的这个例子:

    img = rand(50);     % Random image with values from 0 to 1.
    
    subplot(1, 2, 1);   % Left plot.
    image(img);         % Display image from array.
    colorbar;           % Colorbar showing color scale.
    
    subplot(1, 2, 2);   % Right plot.
    imagesc(img);       % Display image with scaled colors.
    colorbar;           % Colorbar showing color scale.
    

    它们都是相同的图像,但颜色比例不同(请看颜色条)

    为什么
    *50
    *100
    会给出不同的图像,但
    *100
    *500
    *1000
    是相同的吗

    因为
    uint8
    可以存储的最大值是255,所以任何大于255的值都将被截断为255。这就是为什么乘以100、500和1000没有任何区别,因为得到的值都超过255

    这段代码(几乎)实现了我想要的功能,但我不明白它是如何实现的 就这么简单。有人能解释一下这个代码是怎么写的吗 工作

    请注意,这类问题通常是。但是,由于您已经缩小了不理解的代码行,我将向您解释

    你提到:

    FIY,
    weather1618
    是一个384x384阵列,范围从-76到-30。 而
    maxv
    的值为-30

    mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
    image(mapped_array);
    
    第一行代码:

    mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
    
    image(mapped_array);
    
    调用以下函数/运算符:

    • (功能)-转换为双精度
    • (运算符)-按元素划分
    • (运算符)-按元素乘法
    • (函数)-转换为8位无符号整数
    发生了什么事:

  • double(weather1618)
    weather1618
    矩阵转换为,因此矩阵的值现在是十进制数。在MATLAB中,对于负值,double可以表示从-1.79769e+308到-2.22507e-308的数字,对于正值,double可以表示从2.22507e-308到1.79769e+308的数字()。进行此转换的可能原因是为了避免在步骤2中出现错误(下面解释)
  • /maxv
    将矩阵的每个元素除以-30。这将翻转矩阵中每个元素的符号,并将数据缩放1/30倍。由于矩阵在上一步中转换为double,因此除法后获得的数组也将是double类型,并且它将包含十进制数
  • *50
    将矩阵的每个元素乘以50。这将按50倍的比例缩放数据。乘法后获得的数组将继续是double类型,与前面一样
  • uint8(…)
    将矩阵的类型从double转换为uint8(),因此矩阵的值现在将在0到255之间
  • 第二行代码:

    mapped_array = uint8((double(weather1618) ./ maxv) .* 50);
    
    image(mapped_array);
    
    调用函数以显示在步骤4中获得的阵列的图像

    如果我直接做的话

     image(weather1618);
    
    image(weather1618);
    
    我只会得到一张蓝色的照片

    好发现!之所以只看到蓝色图像,是因为默认情况下,
    图像
    功能不使用中的全部颜色范围,因此即使图像中有信息,也无法区分它,因为它不是使用全部颜色范围显示的。另一方面,该函数使用完整的r