You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制灰度色块?能否用二维数组替代三维数组实现?

用二维数组绘制50种灰度色块的简化实现

嘿,你的思路完全正确!灰度确实只需要单通道的数值就能表示——毕竟RGB三个分量相同的时候,本质就是一个单一的亮度值,根本没必要用三维数组来重复三次相同的数据。我来帮你把三维数组的实现改成更简洁的二维版本,完全满足你的需求~

核心逻辑梳理

RGB灰度的本质是:每个像素的R、G、B分量数值相同(或接近),所以我们只需要存储一个亮度值,matplotlib会自动把它转换成对应的灰度色彩。

二维数组实现代码

先补全你提到的三维数组实现示例(方便对比):

import matplotlib.pyplot as plt
import numpy as np

# 生成50个从接近黑到接近白的灰度值
gray_values = np.linspace(1, 254, 50, dtype=np.uint8)
# 三维数组:50行色块 × 100列宽度 × 3通道
gray_blocks_3d = np.repeat(gray_values[:, np.newaxis, np.newaxis], 100, axis=1)
gray_blocks_3d = np.repeat(gray_blocks_3d, 3, axis=2)

fig, ax = plt.subplots(figsize=(10, 5))
ax.imshow(gray_blocks_3d)
ax.axis('off')
plt.show()

下面是简化后的二维数组版本:

import matplotlib.pyplot as plt
import numpy as np

# 同样生成50个灰度值,范围1到254
gray_values = np.linspace(1, 254, 50, dtype=np.uint8)
# 二维数组:50行色块 × 100列宽度,每行的所有像素都是同一个灰度值
gray_blocks_2d = np.repeat(gray_values[:, np.newaxis], 100, axis=1)

fig, ax = plt.subplots(figsize=(10, 5))
# 直接传入二维数组,指定cmap='gray'(其实默认就是灰度,写出来更清晰)
ax.imshow(gray_blocks_2d, cmap='gray')
ax.axis('off')
plt.show()

为什么这个方案可行?

  • imshow函数处理二维数组时,默认会将数值映射到灰度色阶:数值0对应纯黑,255对应纯白,完美匹配你的灰度需求。
  • 省去了重复三次通道的步骤,数组内存占用直接降到原来的1/3,代码也更简洁易懂。

对了,完全get你说的“与那本书无关!;)”的点,咱们就专注在把代码简化到位😉

内容的提问来源于stack exchange,提问作者n1k31t4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:32:54