Как расширить или «увеличить» массив 1d?

У меня есть фрагмент кода C, который может обрабатывать только массив размером 20. Массив, который выводит мой инструмент, намного меньше, чем требуется функции. Есть ли numpy или математическая функция, которая может «увеличить» массив до любого определенного размера, сохраняя при этом его структурную целостность? Например:

У меня есть массив из 8 элементов, который в основном представляет собой «пилообразную» форму с двумя рампами, что означает, что его значения:[1 2 3 4 1 2 3 4]

Что мне нужно для кода C, так это массив из 20 элементов. Поэтому я могу масштабировать его, дополняя линейные интервалы исходного массива «0», например:

[1,0,0,2,0,0,3,0,0,4,0,0,1,0,0,2,0,0,3,0]

таким образом, он добавляет до 20 элементов. Я бы подумал, что этот процесс противоположен «децимации». (Прошу прощения, я упрощаю этот процесс, чтобы он был немного более понятным)

2 ответа

Вы можете управлять им в одну строку, добавляя нули в качестве другой оси, а затем сглаживая:

      sm = np.array([1, 2, 3, 4, 1, 2, 3, 4])
np.concatenate([np.reshape(sm, (8, 1)), np.zeros((8, 3))], axis=1).flatten()

Основываясь на вашем примере, я предполагаю, что следующий подход можно настроить, чтобы делать то, что вы хотите:

  1. повышать дискретизацию с 0s: upsampled_l = [[i, 0, 0] for i in l]с lваш первоначальный список
  2. Сгладить массив flat_l = flatten(upsampled_l)используя метод из Как сделать плоский список из списка списков?например
  3. Получить ожидаемую длину final_l = flat_l[:20]

Например, следующий код дает результат, который вы указали в своем примере:

      l = [1, 2, 3, 4, 1, 2, 3, 4]
upsampled_l = [[i, 0, 0] for i in l]
flat_l = [item for sublist in upsampled_l for item in sublist]
final_l = flat_l[:20]

Однако последний элемент исходного списка (вторые 4) отсутствует в окончательном списке. Возможно, стоит повышать дискретизацию только с одним 0 между ними ( [i, 0]вместо [i, 0, 0]) и, наконец, сделать final_l.extend([0 for _ in range(20 - len(final_l))]).

Надеюсь это поможет!

Другие вопросы по тегам