Как расширить или «увеличить» массив 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 элементов. Я бы подумал, что этот процесс противоположен «децимации». (Прошу прощения, я упрощаю этот процесс, чтобы он был немного более понятным)

Оба ответа были отличными, однако у меня не было функции «выравнивания». Большое спасибо Дереку и Роману! Это означает, что должна быть функция «сглаживания»!

Buck Stuck 05.05.2022 18:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

  1. upsample с 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))]).

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

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

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()

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