当前位置: 首页 > 面试题库 >

Python-大型数组的插值2D数组

充昌勋
2023-03-14
问题内容

我想插入尺寸为4x4的2D数组“测试”(例如,实际上接近于1000x1000),其形状为8x8的网格。

import numpy as np

X = np.arange(0,4,1)
Y = np.arange(0,4,1)

points = np.vstack((X,Y))
points = points.T #my coordinates

#my values as a 2D array
test = np.array([[ 1.2514318 ,  1.25145821,  1.25148472,  1.25151133],
       [ 1.25087456,  1.25090105,  1.25092764,  1.25095435],
       [ 1.25031581,  1.25034238,  1.25036907,  1.25039586],
       [ 1.24975557,  1.24978222,  1.24980898,  1.24983587]])

我尝试使用griddata,但似乎只能使用1D吗?错误告诉我,“值和点的数量不同”,我犯错了吗?

from scipy.interpolate import griddata
grid_x, grid_y = np.mgrid[0:4:8j, 0:4:8j]
grid_z0 = griddata(points, test, (grid_x, grid_y), method='linear')

问题答案:

您可以使用scipy.interpolate.interp2d和进行此操作numpy.meshgrid

您需要确保新的X和Y范围与旧的范围相同,并且步长较小。这很容易np.linspace

import numpy as np
from scipy import interpolate

mymin,mymax = 0,3
X = np.linspace(mymin,mymax,4)
Y = np.linspace(mymin,mymax,4)

x,y = np.meshgrid(X,Y)

test = np.array([[ 1.2514318 ,  1.25145821,  1.25148472,  1.25151133],
       [ 1.25087456,  1.25090105,  1.25092764,  1.25095435],
       [ 1.25031581,  1.25034238,  1.25036907,  1.25039586],
       [ 1.24975557,  1.24978222,  1.24980898,  1.24983587]])

f = interpolate.interp2d(x,y,test,kind='cubic')

# use linspace so your new range also goes from 0 to 3, with 8 intervals
Xnew = np.linspace(mymin,mymax,8)
Ynew = np.linspace(mymin,mymax,8)

test8x8 = f(Xnew,Ynew)

print test8x8
>>> [[ 1.2514318   1.25144311  1.25145443  1.25146577  1.25147714  1.25148852  1.25149991  1.25151133]
     [ 1.25119317  1.25120449  1.25121583  1.25122719  1.25123856  1.25124995  1.25126137  1.25127281]
     [ 1.25095426  1.2509656   1.25097695  1.25098832  1.25099971  1.25101112  1.25102255  1.25103401]
     [ 1.25071507  1.25072642  1.25073779  1.25074918  1.25076059  1.25077201  1.25078346  1.25079494]
     [ 1.25047561  1.25048697  1.25049835  1.25050976  1.25052119  1.25053263  1.2505441   1.25055558]
     [ 1.25023587  1.25024724  1.25025864  1.25027007  1.25028151  1.25029297  1.25030446  1.25031595]
     [ 1.24999585  1.25000724  1.25001866  1.2500301   1.25004156  1.25005304  1.25006453  1.25007605]
     [ 1.24975557  1.24976698  1.24977841  1.24978985  1.24980132  1.24981281  1.24982433  1.24983587]]


 类似资料:
  • 问题内容: 我有两个numpy数组: 我试图得到的是这样的: 我的方法不是很像Numpy,需要针对非常大的数组进行改进(摆脱for循环): 在Numpy中执行此操作的最佳方法是什么?这样生成myarray然后对其进行操作会更好吗? 问题答案: 这种广播技巧:

  • 问题内容: 我想输出二维数组的最大值和最小值。Max可以很好地工作,但是即使在数组中没有零的情况下min也总是输出零。在本例中,我设置为99以防止较小的机会在数组中获得零。继承人完整代码: 问题答案: 由于您在中选择随机值的方式,不会存在小于零的值- 但也无法保证任何值都将恰好为零。但是,您将初始化为零,因为这是数组元素的默认值;没有什么比这更小了,所以答案总是零。 您应该在标记为“查找最小值”的

  • 我有一个由图像像素组成的2D数组,其大小取决于输入图像的大小。我需要将其分解为更小的9x9数组。为了给出更清晰的图片,我尝试说明情况: //smallerArray的行数和列数如下:它应该从imagePixels数组中复制它们,每8列迭代一次,然后再移动到下8行。 我已经完成了以下代码,但无法正确理解我的逻辑。如何停止迭代: 向上复制到第9列或第9行,将其存储在数组中,继续复制到第10列/第10行

  • 问题内容: 假设我要在2d矩形区域内插值。我的变量“ z”包含如下所示的数据。每列的值都是恒定的,但是,数组的每一行的值可以不同,如下面的注释所示。 作为另一种可视化方法,我知道的值数组为: 我不知道“?” 值,并且应该对其进行插值。我尝试将它们替换为“无”,但是所有结果都得到“ nan”。 编辑: 我想我需要使用’griddata’或’interp2’。griddata似乎产生了我期望的结果,但

  • 问题内容: 我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列- 我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示: 到目前为止,我已经尝试过 但这给了我错误的输出。任何帮助请。 问题答案: 工作原理: 如果您在工作分配中使用 两个 numpy数组建立索引, 然后认为NumPy的作为过的各元件同时移动和中的每

  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]