Python ValueError:无法将输入数组从形状(10,1)广播到形状(10)

Python ValueError:无法将输入数组从形状(10,1)广播到形状(10),python,numpy,Python,Numpy,我对一些我认为相当简单的事情有意见。我试图用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] f

我对一些我认为相当简单的事情有意见。我试图用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
为什么数据[n,nRuns].shape=10,而不是10,1?我怎样才能做到这一点呢?

data[:,I]创建数据数组的秩1切片,例如,这就是为什么它的形状是10,而不是10,1。额外的尺寸是长度1,这是无关的。您应该将轨迹分配为排名1:

track = np.zeros(n)
你可以改变数据[:,i]的形状,给它额外的维度,但那是不必要的;您只使用轨迹和外观的第一个维度,因此只需将它们设置为一维而不是二维


这种必须为数组声明二维的方式非常类似于Matlab;我一直不喜欢Matlab的默认设置是创建2D数组,但在numpy中,默认设置是1D,更简单、更直观

您正在执行“单元素索引”:。还要确保您理解“广播”:二维数组的一个片段,即行或列,即数据[:,i],是一维数组。您正在尝试将二维阵列设置为一维阵列。大小匹配,但维度不匹配。简单的解决方案:使用data[:,i]=track.flatte代替data[:,i]=track