Pythonic метод вытащить несколько массивов из словаря и сложить их с NumPy - PullRequest
0 голосов
/ 24 января 2019

У меня есть словарь, в котором есть массивы. Я хотел бы собрать эти массивы с помощью numpy и сложить их с помощью np.dstack, и я не могу понять, как это сделать. Формат словаря показан ниже минус nxx, конечно. Кроме того, я показываю числа nx в последовательности, и хотя словарь содержит ключи n1, n2 вплоть до наибольшего значения n, на самом деле они не находятся в последовательности.

{'n0': masked_array, 'n1': masked_array, 'n2': masked_array, ..., 'nxx': masked_array}

Данные для каждой пары отображаются как

'n0': masked_array(
  data=[[0.13530391454696655, 0.26814308762550354, 0.26814308762550354,
         ..., --, --, --],
        [0.21222707629203796, 0.22386012971401215, 0.19620446860790253,
         ..., --, --, --],
        [0.22701908648014069, 0.23818181455135345, 0.23777709901332855,
         ..., --, --, --],
        ...,
        [--, --, --, ..., --, --, --],
        [--, --, --, ..., --, --, --],
        [--, --, --, ..., --, --, --]],
  mask=[[False, False, False, ...,  True,  True,  True],
        [False, False, False, ...,  True,  True,  True],
        [False, False, False, ...,  True,  True,  True],
        ...,
        [ True,  True,  True, ...,  True,  True,  True],
        [ True,  True,  True, ...,  True,  True,  True],
        [ True,  True,  True, ...,  True,  True,  True]],
  fill_value=-inf,
  dtype=float32)

Указание печати каждого объекта с использованием

print(arraydict['n0'])

1010 * обеспечивает *

[[0.13530391454696655 0.26814308762550354 0.26814308762550354 ... -- --
  --]
 [0.21222707629203796 0.22386012971401215 0.19620446860790253 ... -- --
  --]
 [0.22701908648014069 0.23818181455135345 0.23777709901332855 ... -- --
  --]
 ...
 [-- -- -- ... -- -- --]
 [-- -- -- ... -- -- --]
 [-- -- -- ... -- -- --]]

Так что, если бы они были отдельными переменными, я мог бы сделать что-то вроде (важно, чтобы n-порядок был важен)

arraystack = np.dstack((n0, n1, n2, n3, ..., nxx, ))

Я не могу на всю жизнь осмыслить, как использовать np.dstack для извлечения и суммирования каждого из словаря, начиная с n0 и далее как

arraystack = np.dstack(([arraydict[key] for key in arraydict]))

, кажется, работает, но, похоже, не поддерживает последовательность n0, n1, n2, n3.

1 Ответ

0 голосов
/ 24 января 2019

Вы можете попробовать

arraystack = np.dstack([arraydict['n'+str(i)] for i in range(len(arraydict))])

Это обеспечит сохранение заказа.

...