相关疑难解决方法(0)

Python/Scipy插值(map_coordinates)

我正在尝试用scipy做一些插值.我已经经历了很多例子,但我找不到我想要的东西.

假设我有一些数据,其中行和列变量可以在0到1之间变化.每行和每列之间的增量变化并不总是相同(见下文).

      | 0.00   0.25  0.80  1.00
------|----------------------------
0.00  | 1.40   6.50  1.50  1.80
0.60  | 8.90   7.30  1.10  1.09
1.00  | 4.50   9.20  1.80  1.20
Run Code Online (Sandbox Code Playgroud)

现在我希望能够获取一组x,y点并确定插值.我知道我可以用map_coordinates做到这一点.我想知道是否有任何简单/巧妙的方法可以将x,y值设置为数据数组中的相应索引.

例如,如果我输入x,y = 0.60,0.25,那么我应该找回要插值的正确索引.在这种情况下,这将是1.0,1.0,因为0.60,0.25将精确映射到第二行和第二列.x = 0.3将映射到0.5,因为它介于0.00和0.60之间.

我知道如何得到我想要的结果,但我确信有一个非常快速/清晰的单行或双行(或已经存在的功能)可以做到这一点,使我的代码更清晰.基本上它需要在一些数组之间进行分段插值.

这是一个例子(很大程度上基于numpy数组上Scipy插值的代码) - 我将TODO放在这个新函数的位置:

from scipy.ndimage import map_coordinates
from numpy import arange
import numpy as np
#            0.000,  0.175,  0.817,  1.000
z = array([ [ 3.6,    6.5,    9.1,    11.5],    # 0.0000
            [ 3.9,   -7.3,    10.0,   13.1],    # 0.2620
            [ 1.9,    8.3,   -15.0,  -12.1],    # 0.6121
            [-4.5, …
Run Code Online (Sandbox Code Playgroud)

python interpolation numpy scipy

11
推荐指数
1
解决办法
1万
查看次数

插入缺失值2d python

我有一个二维数组(如果你愿意,还有矩阵),其中一些缺失值表示为 NaN.缺失值通常沿一个轴的条带,例如:

1   2   3 NaN   5
2   3   4 Nan   6
3   4 Nan Nan   7
4   5 Nan Nan   8
5   6   7   8   9
Run Code Online (Sandbox Code Playgroud)

在哪里我想NaN用一些有意义的数字代替's.

我查看了delaunay三角测量,但发现文档很少.

我尝试使用astropy's convolve,因为它支持使用2d数组,而且非常简单.这个问题是卷积不是插值,它将所有值移向平均值(可以通过使用窄内核来减轻).

这个问题应该是这篇文章的自然二维扩展.有没有办法NaN在2d阵列中插入/丢失值?

python interpolation numpy

8
推荐指数
2
解决办法
8170
查看次数

从可能不完整的候选列表构建2D网格

问题

我需要使用一组候选位置(X和中的值Y)构建一个2D网格.然而,可能存在应该被过滤掉的假阳性候选者,以及假阴性(其中需要针对给定周围位置值的预期位置创建位置).可以预期网格的行和列是直的,并且旋转(如果小的话).

此外,我没有关于(0,0)网格位置的可靠信息.但我知道:

grid_size = (4, 4)

expected_distance = 105
Run Code Online (Sandbox Code Playgroud)

(例外距离只是网格点之间间距的粗略估计,应允许在10%的范围内变化).

示例数据

这是理想的数据,没有误报,也没有漏报.该算法需要能够处理删除多个数据点并添加错误的数据点.

X = np.array([61.43283582, 61.56626506, 62.5026738,   65.4028777, 167.03030303, 167.93965517, 170.82191781, 171.37974684, 272.02884615, 272.91089109, 274.1031746, 274.22891566, 378.81553398, 379.39534884, 380.68181818, 382.67164179])

Y = np.array([55.14427861, 160.30120482, 368.80213904, 263.12230216, 55.1030303, 263.64655172, 162.67123288, 371.36708861, 55.59615385, 264.64356436, 368.20634921, 158.37349398, 54.33980583, 160.55813953,  371.72727273,  266.68656716])
Run Code Online (Sandbox Code Playgroud)

以下函数评估候选项并返回两个词典.

第一个具有每个候选位置(作为2长度元组)作为键和值是位于右侧和下方的位置的2长度元组(使用来自图像如何显示的逻辑).这些邻居本身要么是2长的元组坐标,要么是a None.

第二个字典是第一个字典的反向查找,使得每个候选者(位置)具有支持它的其他候选者位置的列表.

import numpy as np
from collections import defaultdict

def get_neighbour_grid(X, Y, expect_dist=(105, 105)):

    t1 = (expect_dist[0] + expect_dist[1]) / 2.0 * …
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
538
查看次数

基于一些给定的参考元素插值颜色矩阵的元素

这或多或少是对从4角色插值的二维颜色渐变(256x256矩阵)的后续问题,今天jadsq深刻回答了这个问题.

对于线性渐变,前面的答案非常有效.但是,如果想要更好地控制渐变的停止颜色,这种方法似乎不太实用.在这种情况下可能有用的是在矩阵(查找表)中有一些参考色点,用于插入查找表中空位置的颜色值.我的意思可能更容易从下面的图像中读出来.

在此输入图像描述

整个想法来自http://cartography.oregonstate.edu/pdf/2006_JennyHurni_SwissStyleShading.pdf第4页到第6页.我已经阅读了论文,理论上我理解发生了什么但由于我的经验不足而惨遭失败插值方法,说实话,一般数学技能.可能还有兴趣的是,他们使用S形高斯钟作为插值方法(第6页).他们认为高斯加权产生了视觉上最好的结果并且计算简单(方程1,对于每256个单元256个表,k = 0.0002).


编辑(更好的插图):

用于插值颜色的加权函数

公式1


我已经将其呈现方法的其他部分放在适当位置,但填充矩阵中的空值确实是一个关键部分,并使我无法继续.再一次,谢谢你的帮助!

我现在拥有的:

#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt 

# the matrix with the reference color elements
ref=np.full([7, 7, 3], [255,255,255], dtype=np.uint8)
ref[0][6] = (239,238,185)
ref[1][1] = (120,131,125)
ref[4][6] = (184,191,171)
ref[6][2] = (150,168,158)
ref[6][5] = (166,180,166)

# s = ref.shape
#
# from scipy.ndimage.interpolation import zoom
# zooming as in https://stackoverflow.com/a/39485650/1230358 doesn't seem to work here anymore, because we have no corner point as reference but …
Run Code Online (Sandbox Code Playgroud)

python numpy image-processing matrix scipy

5
推荐指数
1
解决办法
663
查看次数

标签 统计

numpy ×4

python ×4

interpolation ×2

scipy ×2

image-processing ×1

matrix ×1