Как сделать линейную интерполяцию для двумерного массива с разреженными данными? - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть двумерный массив NumPy ... на изображении есть некоторые значения, а остальное редко.Для линейной имперполяции я хочу взять первый столбец массива.Посмотрите, где значения присутствуют, и выполните линейную интерполяцию по нулевым значениям, но только по одному интервалу.

Мы зациклим каждый столбец двумерного массива

В качестве примера рассмотрим следующеепервый столбец

   a = [0,0,0,0,1,0,0,0,2,0,0,10,0,0,3,4,6,0,0,1,0,0]

Первые четыре 0,0,0,0 будут той же копией первого элемента non_zero, в нашем случае это 1.

Второй интервал линейной интерполяции будет

   [1,0,0,0,2]

Третьим и остальным будет

   [2,0,0,10]
   [10,0,0,3]
   [6,0,0,1]

В конце будет скопирован последний элемент.

Большое спасибо

1 Ответ

1 голос
/ 13 сентября 2011

Попробуйте что-то вроде этого:

import numpy as np

a = np.array([0,0,0,0,1,0,0,0,2,0,0,10,0,0,3,4,6,0,0,1,0,0])
x, = np.nonzero(a)
a_filled = np.interp(np.arange(a.size), x, a[x])

Это дает:

array([1, 1, 1, 1, 1, 1.25, 1.5, 1.75, 2, 4.67, 7.33, 10, 7.67, 5.33, 3, 4, 6, 4.33, 2.67, 1, 1, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...