#python #arrays #numpy
Вопрос:
Допустим, у меня есть простой массив, подобный этому:
import numpy as np
a = np.array([1,2,3])
Что возвращает меня, очевидно:
array([1, 2, 3])
Я пытаюсь добавить вычисленные значения между последовательными значениями в этом массиве. Расчет должен возвращать мне n
значения с равным расстоянием между его границами.
Чтобы выразить себя в цифрах, предположим, я хочу добавить 1
значение между каждой парой последовательных значений, поэтому функция должна вернуть мне массив, подобный этому:
array([1, 1.5, 2, 2.5, 3])
Другой пример, теперь со 2
значениями между каждой парой:
array([1, 1.33, 1.66, 2, 2.33, 2.66, 3])
Я знаю логику и могу создать себе функцию, которая будет выполнять эту работу, но я чувствую, что у numpy есть определенные функции, которые сделали бы мой код намного чище!
Ответ №1:
Если ваш массив является
import numpy as np
n = 2
a = np.array([1,2,5])
new_size = a.size (a.size - 1) * n
x = np.linspace(a.min(), a.max(), new_size)
xp = np.linspace(a.min(), a.max(), a.size)
fp = a
result = np.interp(x, xp, fp)
ВОЗВРАТ: array([1. , 1.33333333, 1.66666667, 2. , 2.66666667, 3.33333333, 4. ])
Если ваш массив всегда расположен равномерно, вы можете просто использовать
new_size = a.size (a.size - 1) * n
result = np.linspace(a.min(), a.max(), new_size)
Комментарии:
1. Фантастика! Ты даже предсказал проблему, о которой я не знал, что у меня есть
Ответ №2:
Использование linspace должно помочь:
a = np.array([1,2,3])
n = 1
temps = []
for i in range(1, len(a)):
temps.append(np.linspace(a[i-1], a[i], num=n 1, endpoint=False))
# Add last final ending point
temps.append(np.array([a[-1]]))
new_a = np.concatenate(temps)
print(new_a)
Ответ №3:
Попробуйте с np.arange
:
a = np.array([1,2,3])
n = 2
print(np.arange(a.min(), a.max(), 1 / (n 1)))
Выход:
[1. 1.33333333 1.66666667 2. 2.33333333 2.66666667]