我遇到了一些问题,尽管那很简单。我试图用来自for循环的数据填充零矩阵,但我不断收到错误消息:“ ValueError:无法将输入数组从形状(10,1)广播到形状(10)”
我的代码如下:
import numpy as np
import random
def hire(n = 10, nRuns = 2):
data = np.array(np.zeros((n,nRuns)))
i = 0
while i < nRuns:
cand = [[w] for w in range(1,n+1)]
random.shuffle(cand)
look = np.zeros((n,1))
track = np.zeros((n,1))
for M in range(0,n-1):
look[M] = cand[M]
lookbest = max(look)
left = cand[M:]
for q in range(0, n-M-1):
if left[q] > lookbest:
track[M] = left[i]
break
else:
pass
data[:,i] = track #the error occurs right here
i = i + 1
为什么data [n,nRuns] .shape =(10,)而不是(10,1)?而我该如何做呢?
答案 0 :(得分:1)
data[:,i]
创建数据数组的等级1切片,例如这就是为什么它的形状是(10,)而不是(10,1)的原因。额外的尺寸是长度1,这是多余的。您应该分配音轨,使其也处于等级1:
track = np.zeros(n)
您可以调整data[:,i]
的形状以使其具有更大的尺寸,但这是不必要的;您仅使用track
和look
的一维,因此只需将它们设为1-D而不是2-D
(必须为数组声明二维的样式非常类似于Matlab;我一直讨厌Matlab的默认值是创建2D数组,但是在numpy中,默认值是1D,更简单,更直观)< / p>