如何将(256,144)的Numpy全0数组每个元素转为[0,0,0]?
解决方法
你的问题核心是数组维度不匹配:你想要每个位置存储长度为3的数组,最终数组形状应为(256, 144, 3),但你创建的是二维数组(256,144),每个元素是标量,无法直接赋值序列[0,0,0],这才导致报错。
最简单高效的写法
直接创建目标形状的全0三维数组,一步到位:
import numpy as np empty_windows = np.zeros((256, 144, 3))
这样每个位置默认就是[0,0,0],完全符合需求,而且不需要循环(numpy的向量操作比循环高效得多)。
为什么你的代码报错?
np.zeros(256, 144)写法有误:np.zeros的第一个参数应该是表示形状的元组,正确写法是np.zeros((256,144)),不过即使修正了这一点,得到的还是二维标量数组,依然无法给单个元素赋值序列。- 循环赋值的思路错误:二维数组的每个元素是单个数值,不能直接替换成长度为3的列表,必须先把数组扩展到三维。
如果一定要基于原二维数组修改(不推荐)
如果已经有一个(256,144)的数组,想要把每个元素变成[0,0,0],可以用np.tile扩展维度:
empty_windows = np.zeros((256, 144)) # 扩展为三维,每个位置重复3个0 empty_windows = np.tile(empty_windows[..., np.newaxis], (1,1,3))
但这种方法不如直接创建三维数组高效,优先推荐第一种写法。
内容的提问来源于stack exchange,提问作者Maria Sabrina Ma
相关产品推荐
相关产品推荐

