如何在不使用列表或元组的情况下初始化N×M的NumPy数组?
解决NumPy数组创建的广播错误
错误原因
你用np.full(shape=4, fill_value=np.zeros(M))时,shape=4会创建一个一维数组,每个位置需要填充标量值,但你传入的np.zeros(M)是长度为3的一维数组,NumPy无法将这个3元素数组塞进一维数组的单个标量位置,因此触发广播错误。
正确实现方式(无需列表/元组嵌套)
要创建N行M列的二维数组,直接指定二维shape即可,以下是几种可行方案:
方案1:直接初始化指定二维shape
如果需要初始值为固定标量(比如0、1或自定义值),直接给shape传入(N, M):
import numpy as np N=4 M=3 # 初始化为0的二维数组 kg_neurons1 = np.zeros((N, M)) # 初始化为1的二维数组 kg_neurons1 = np.ones((N, M)) # 初始化为自定义标量(比如5)的二维数组 kg_neurons1 = np.full((N, M), fill_value=5)
方案2:生成随机值的二维数组
如果需要非固定值的元素,用随机数生成函数直接指定shape:
# 生成0-1之间的随机浮点数数组 kg_neurons1 = np.random.rand(N, M) # 生成0到9之间的整数随机数组 kg_neurons1 = np.random.randint(0, 10, size=(N, M))
方案3:用tile重复一维数组
通过np.tile将一维数组重复N次,构建二维数组:
# 先创建长度为M的一维数组,再重复为N行 kg_neurons1 = np.tile(np.zeros(M), (N, 1))
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

