Я хочу создать nxm ndarray с python следующим образом:
myarray = np.empty(n)
for index in range(5):
row = do_some_calculations(index)# returns an array of length n
np.stack[myarray, row])
который не работает. Я получаю сообщение об ошибке:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Кроме того, я не хочу, чтобы в первой строке были нули. Должен ли я использовать в цикле оператор if-else или есть более питонический способ сделать это?
Пожалуйста, покажите точный код. Ошибка намекает на то, что вы складываете массивы неравного размера, поэтому ваше утверждение, что do_some_calculations(index) «возвращает массив длины n», кажется неверным.
Да не такой же длины ... Но как это сделать в ОБЩЕМ? С дополнительным если?






Попробуйте np.vstack вместо np.stack.
Кажется, ваше намерение состоит в том, чтобы итеративно добавить массив внизу ND-массива (что, кстати, неэффективно, посмотрите, не можете ли вы сгенерировать весь массив за один раз). После первой итерации форма вашего myarray изменится (при условии, что вы переназначили, что ваш код не отображал) на матрицу 2 на что-то. В документации numpyp.stack указано
arrays : sequence of array_like Each array must have the same shape
numpy.vstack менее строг.
А как насчет первой строки нуля?
Если вы не можете сделать инициализацию более одноразовой, как насчет повторной индексации после цикла? Как это: myarray = myarray[1:,:]? Если бы это был я, я бы попытался обобщить ваш do_some_calculations, но без вашего фактического кода (или его минимальной версии) никто не мог бы догадаться.
@Alex, значит, на твой вопрос ответили? Если да, отметьте проблему как решенную, поставив галочку рядом с ответом. Это также будет означать, что ваша проблема решена.
Возможный дубликат Numpy - добавить строку в массив