Изменить форму зубчатого массива и заполнить нулями - PullRequest
1 голос
/ 10 июля 2020

Задача, которую я sh должен выполнить sh, заключается в следующем: Рассмотрим 1-D массив a и массив индексов parts длины N. Пример:

a = np.arange(9)
parts = np.array([4, 6, 9])

# a = array([0, 1, 2, 3, 4, 5, 6, 7, 8])

Я хочу преобразовать a в 2-D массив формы (N, <length of longest partition in parts>), вставив значения a до каждого индекса в indx в каждая строка массива 2-D , заполняя оставшуюся часть строки нулями, например:

array([[0, 1, 2, 3],
       [4, 5, 0, 0],
       [6, 7, 8, 0])

Я не использую sh для использования циклов. Не могу осмыслить это, любая помощь приветствуется.

1 Ответ

1 голос
/ 10 июля 2020

Вот один с boolean-indexing -

def jagged_to_regular(a, parts):
    lens = np.ediff1d(parts,to_begin=parts[0])
    mask = lens[:,None]>np.arange(lens.max())
    out = np.zeros(mask.shape, dtype=a.dtype)
    out[mask] = a
    return out

Пробный прогон -

In [46]: a = np.arange(9)
    ...: parts = np.array([4, 6, 9])

In [47]: jagged_to_regular(a, parts)
Out[47]: 
array([[0, 1, 2, 3],
       [4, 5, 0, 0],
       [6, 7, 8, 0]])
...