我对一些简单的事情有意见。我试图用for循环中的数据填充一个0矩阵,但我一直收到错误:“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)?我该怎么做呢?在
data[:,i]
创建数据数组的秩1切片,例如,这就是它的形状是(10,)而不是(10,1)的原因。额外的维度是长度1,这是无关的。你应该将音轨分配到1级:您可以重塑},所以只需将它们设为1-D而不是2-D
data[:,i]
以给它额外的维度,但这是不必要的;您只使用了第一个维度track
和{(必须为数组声明二维的风格非常类似于Matlab;我一直讨厌Matlab的默认值是创建2D数组,但在numpy中,默认值是1D,更简单、更直观)
相关问题 更多 >
编程相关推荐