Как составить последовательность двумерных массивов в цикле for с выводом в многомерный массив - PullRequest
0 голосов
/ 05 июля 2019

У меня есть функция, которую я хотел бы запустить (в python 3.7 ) на серии высот датчика (z).Каждый результирующий 2D массив должен быть объединен в один многомерный массив, к которому я затем смогу получить доступ позже.Я не смог объединить свои результаты, и сейчас каждый раз, когда я запускаю свои циклы for, он просто перезаписывает предыдущий цикл.

Я пытался использовать np.стека и объединения, и пытался использовать np.append вне стека, а также пытаться что-то вроде np.stack(AS_temp[k]), что привело к ошибке.

AS = np.zeros((len(z),len(x),len(y)))  
for k in range(len(z)):
    AS_temp = np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2))
    AS = np.stack(AS_temp,axis = 0)

Цикл for должен проходить через каждое значение z,вычислить функцию AS_temp (которая является двумерным массивом), а затем добавить ее по вертикали в мой многомерный массив AS.В конце я бы хотел трехмерное пространство, где каждая горизонтальная 'slice' представляет собой значение z из цикла for.

1 Ответ

0 голосов
/ 05 июля 2019

Есть довольно много способов сделать это.Если вы все еще хотите numpy.zeros

AS = np.zeros((len(z),len(x),len(y)))  
for k in range(len(z)):
    AS[k] = np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2))

Нет укладки.Если вы хотите использовать стек, вы должны использовать его в конце.(Согласно документации, в которой говорится, что «каждый массив должен иметь одинаковую форму».

AS_stack = []
for k in range(len(z)):
    AS_stack.append(np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2)))
AS = np.stack(AS_stack,axis = 0)

Или, если GradX, GradY и GradZ также являются массивами:

AS = np.sqrt((GradX**2) + (GradY**2) + (GradZ**2))
...