定义4维numpy全1矩阵时代码报错该如何调试
代码调试方案
问题根因
- numpy.zeros的第一个入参要求是表示矩阵维度的元组,不能将各个维度的数值作为独立参数依次传入。你原本的写法
numpy.zeros(t[0],t[1],t[2],t[3])是把4个维度拆成了4个独立位置参数,超出了zeros最多3个位置参数的限制,所以抛出类型错误。 - 你调整为3维后依然报错,是因为此时第一个参数
t[0]=3被识别为shape(生成的是长度为3的一维数组),第二个参数t[1]=4被识别为dtype(数据类型),4不是合法的dtype参数,自然运行失败。
修复方案
最优写法(无需循环)
要生成全1的N维矩阵,直接调用numpy内置的ones方法即可,一行代码就能完成,性能远高于手动循环赋值:
import numpy as np # 四维全1矩阵,shape为(3,4,5,6) a = np.ones((3,4,5,6)) print(a)
保留原逻辑的修复写法
如果你一定要沿用“先创建全0矩阵再循环赋值为1”的逻辑,只要把shape作为元组传入zeros即可:
import numpy as np t = (3,4,5,6) # 把维度元组作为第一个参数传入zeros a = np.zeros(t) for x in range(t[0]): for y in range(t[1]): for z in range(t[2]): for w in range(t[3]): a[x][y][z][w] = 1 print(a)
3维的情况同理,把t=(3,4,5)作为shape传入zeros即可:a = np.zeros(t)
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

