Как вставить в массив numpy

#python #numpy

#python #numpy

Вопрос:

Существует две матрицы. Первая представляет собой матрицу данных с размером (85,7794,64), а вторая мигает с размером (85,7794). Я должен извлечь некоторые части данных в соответствии с мигающей матрицей при определенном условии, которое указано в приведенном ниже коде. Нет никаких сомнений в производительности условия, но когда я пытаюсь вставить извлеченные данные (с размером (20,64)) в предопределенную матрицу хранения с размером (85,3600,64) (3600, потому что 180 частей данных с размером (20,64) должны быть извлечены из данных, поэтому 180 * 20 = 3600) выдает ошибку, которая упоминается ниже. Спасибо, если кто-нибудь может помочь решить эту проблему.

ОШИБКА:

Ошибка значения: не удалось передать входной массив из формы (20,64) в форму (0,64)

 storage_matrix = np.zeros((85,3600,64))


for i in range(0,84):    
    for j in range(0,7793):
        t = j   1
        s = j   20
        if Flashing[i,j] == 0 and Flashing[i,t] == 1:
            storage_matrix[i,j:s,:] = data[i,j:s,:]
            
 

Ответ №1:

Ваш диапазон для внутреннего цикла слишком велик. Рассмотрим, что происходит j>3600 во внутреннем цикле.

Когда вы говорите storage_matrix[i, j:s, :] , и если j>3600 , код прерывается, потому что размер среднего измерения storage_matrix равен 3600. Это возвращает пустой массив. Следовательно, вы видите нулевое измерение в своем сообщении об ошибке.

Не уверен, что вы пытаетесь здесь сделать, но, возможно, вы имели в виду 3600 во внутреннем цикле.

Комментарии:

1. Спасибо. но это не ответ, позвольте мне объяснить подробнее. я хочу извлечь 180 частей матрицы данных, длина каждой части которых равна 20, поэтому внутренний цикл должен проходить через всю матрицу данных, чтобы извлечь все 180 частей. я думаю, что проблема заключается в последней команде, которая не укладывает каждую из 180 частей ниже другой.