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

时间:2018-10-30 01:57:52

标签: 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] 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)?而我该如何做呢?

1 个答案:

答案 0 :(得分:1)

data[:,i]创建数据数组的等级1切片,例如这就是为什么它的形状是(10,)而不是(10,1)的原因。额外的尺寸是长度1,这是多余的。您应该分配音轨,使其也处于等级1:

track = np.zeros(n)

您可以调整data[:,i]的形状以使其具有更大的尺寸,但这是不必要的;您仅使用tracklook的一维,因此只需将它们设为1-D而不是2-D

(必须为数组声明二维的样式非常类似于Matlab;我一直讨厌Matlab的默认值是创建2D数组,但是在numpy中,默认值是1D,更简单,更直观)< / p>