Могу ли я создать массив dask с отложенной формой - PullRequest
0 голосов
/ 03 июля 2018

Можно ли создать массив dask из отложенного значения, указав его форму с другим задержанным значением?

Мой алгоритм не даст мне форму массива, пока не начнутся запоздалые вычисления.

В конце концов, я буду создавать некоторые блоки с формами, указанными в промежуточных результатах моих вычислений, в конечном итоге вызывая da.concatenate для всех результатов (ну, если бы это было более гибко, da.block)

Не думаю, что это слишком пагубно, если я не смогу, но было бы здорово, если бы смог.

Пример кода

from dask import delayed
from dask import array as da
import numpy as np

n_shape = (3, 3)
shape = delayed(n_shape, nout=2)
d_shape = (delayed(n_shape[0]), delayed(n_shape[1]))
n = delayed(np.zeros)(n_shape, dtype=np.float)


# this doesn't work
# da.from_delayed(n, shape=shape, dtype=np.float)
# this doesn't work either, but I think goes a little deeper
# into the function call
da.from_delayed(n, shape=d_shape, dtype=np.float)

1 Ответ

0 голосов
/ 03 июля 2018

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

Пример

import random
import numpy as np
import dask
import dask.array as da

@dask.delayed
def f():
    return np.ones((5, random.randint(10, 20)))  # a 5 x ? array

values = [f() for _ in range(5)]
arrays = [da.from_delayed(v, shape=(5, np.nan), dtype=float) for v in values]
x = da.concatenate(arrays, axis=1)

>>> x
dask.array<concatenate, shape=(5, nan), dtype=float64, chunksize=(5, nan)>

>>> x.shape
(5, np.nan)

>>> x.compute().shape
(5, 88)

Docs

См. http://dask.pydata.org/en/latest/array-chunks.html#unknown-chunks

...