У меня есть фрагмент кода 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 элементов. Я бы подумал, что этот процесс противоположен «децимации». (Прошу прощения, я упрощаю этот процесс, чтобы он был немного более понятным)
Основываясь на вашем примере, я предполагаю, что следующий подход можно настроить, чтобы делать то, что вы хотите:
upsampled_l = [[i, 0, 0] for i in l]
где l
ваш начальный списокflat_l = flatten(upsampled_l)
, используя метод из
Как сделать плоский список из списка списков? например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))])
.
Надеюсь это поможет!
Вы можете управлять им в одну строку, добавляя нули в качестве другой оси, а затем сглаживая:
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()
Оба ответа были отличными, однако у меня не было функции «выравнивания». Большое спасибо Дереку и Роману! Это означает, что должна быть функция «сглаживания»!