ValueError: не удалось передать входной массив из shape (10,1) в shape (10) - PullRequest
0 голосов
/ 30 октября 2018

У меня проблемы с чем-то, что я, хотя, было бы довольно просто. Я пытаюсь заполнить матрицу нулей данными из цикла for, но получаю сообщение об ошибке: «ValueError: не удалось передать входной массив из shape (10,1) в shape (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 голосов
/ 30 октября 2018

data[:,i] создает срез ранга 1 массива данных, например, поэтому его форма (10,), а не (10,1). Дополнительное измерение - длина 1, оно постороннее. Вы также должны выделить трек на ранг 1:

track = np.zeros(n)

Вы можете изменить data[:,i], чтобы придать ему дополнительное измерение, но в этом нет необходимости; вы используете только первое измерение track и look, поэтому просто сделайте их 1-D вместо 2-D

(этот стиль объявления двух измерений для массива очень похож на Matlab; я всегда ненавидел то, что по умолчанию Matlab создавал двумерный массив, но в numpy по умолчанию используется 1D, гораздо проще и интуитивнее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...