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

如何在无Numpy的MicroPython环境中用0填充三维数组

解决MicroPython中RGB LED矩阵三维零数组创建问题

我正在使用MicroPython通过微控制器控制RGB LED矩阵,无法使用Numpy创建数组。为了让其余代码能调用对应位置的数据,需要用0填充该三维数组。希望能通过函数实现,以适配不同尺寸的LED面板。

目前我手动编写数组,但这种方式不具备扩展性,还会大幅拖慢编辑器速度。我尝试过用函数实现,但不知如何添加值而非引用,代码如下:

def setbase():
    base2 = []
    for y in range(WIDTH):
            base2.insert(y,[0,0,0])
    
    for x in range(HEIGHT):
        base.insert(x,base2)

问题根源

你写的代码里,base2是同一个列表对象,每次往base里插入的都是它的引用——也就是说base里所有行其实指向同一个列表,改其中一行的RGB值,所有行都会跟着变,这显然不是你想要的效果。

正确实现方式

下面两种方法都能生成独立的三维零数组,还能通过参数适配不同尺寸的LED面板:

方法1:嵌套循环写法

def create_rgb_matrix(width, height):
    rgb_matrix = []
    # 遍历高度方向的每一行
    for _ in range(height):
        current_row = []
        # 遍历宽度方向的每个像素
        for _ in range(width):
            # 每次新建一个[0,0,0]列表,避免引用复用
            current_row.append([0, 0, 0])
        rgb_matrix.append(current_row)
    return rgb_matrix

# 示例:创建宽16、高12的LED矩阵数组
matrix = create_rgb_matrix(16, 12)

方法2:列表推导式(更简洁高效)

MicroPython支持列表推导式,这种写法更紧凑:

def create_rgb_matrix(width, height):
    # 外层循环控制行数,内层控制每行的像素数,每个像素都是独立的[0,0,0]
    return [[[0, 0, 0] for _ in range(width)] for _ in range(height)]

# 示例:创建宽8、高8的矩阵
matrix = create_rgb_matrix(8, 8)

用这两种方法生成的数组,每个像素的[0,0,0]都是独立的对象,修改任意位置的值都不会影响其他像素,而且可以灵活调整width和height参数适配不同面板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:42:43