Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,将一维数据投影和插值到三维网格上(头表面EEG电源)_Python_Arrays_Numpy_Matplotlib_Spatial Interpolation - Fatal编程技术网

Python,将一维数据投影和插值到三维网格上(头表面EEG电源)

Python,将一维数据投影和插值到三维网格上(头表面EEG电源),python,arrays,numpy,matplotlib,spatial-interpolation,Python,Arrays,Numpy,Matplotlib,Spatial Interpolation,我有一个用于26个脑电通道的一维阵列(脑电电压),我还有脑电通道的三维坐标 x = np.array([ 84.06, 83.74, 41.69, 51.87, 57.01, 51.84, 41.16, 21.02, 24.63, 21.16, -16.52, -13.25, -11.28, -12.8 , -16.65, -48.48, -48.77, -48.35, -75.17, -80.11, -

我有一个用于26个脑电通道的一维阵列(脑电电压),我还有脑电通道的三维坐标

x = np.array([  84.06,   83.74,   41.69,   51.87,   57.01,   51.84,    
    41.16, 21.02,   24.63,   21.16,  -16.52,  -13.25,  -11.28,    
   -12.8 , -16.65,  -48.48,  -48.77,  -48.35,  -75.17,  -80.11,     
   -82.23, -80.13,  -75.17, -114.52, -117.79, -114.68])                                                                                                                           

y = np.array([-26.81,  29.41, -66.99, -48.05,   0.9 ,  50.38,      
    68.71, -58.83, 0.57,  60.29, -83.36, -65.57,   0.23,  66.5 ,   
   -65.51, -0.42,  65.03, -71.46, -55.07,  -0.87,  53.51,  71.1 , 
   -28.98, -1.41,  26.89])

z = np.array([-10.56, -10.04, -15.96,  39.87,  66.36,  41.33, -15.31, 
    54.82, 87.63,  55.58, -12.65,  64.98,  99.81,  65.11, -11.79,     
    68.57, 98.37,  68.57,  -3.7 ,  59.44,  82.43,  59.4 ,  -3.69,      
    9.67, 15.84, 9.45])

data = [  884007.64101968,   997175.31684776,   853520.29922077,
    1146032.72839618,  1280654.00515894,  1136783.42927035,
     781802.02852187,  1165581.44354253,  1474539.74412991,
    1074018.46853295,   578909.21492644,  1067652.55432892,
    1508963.49572301,  1012764.69535714,   533385.60827991,
    1058268.82537597,  1392128.01175867,  1043996.55697014,
     675548.3896822 ,  1022400.8910867 ,  1360502.28709052,
    1108773.44991746,   780841.92929488,   986799.48807626,
     947189.96382125,   994734.32179115])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(x, y, z)
plt.show()
现在,我想根据通道位置(x、y和z)将1d阵列(数据)投影到3d插值曲面上

我的问题是,我不知道如何将1d向量塑造成一个3d数组,反映点的位置和值,然后对它们进行插值以生成更易于解释的图。此外,我还可以在绘制它时使用一些帮助

我使用的是>python 3,对于绘图,我主要使用matplotlib

使用scipy.interpolate.griddata进行二维插值(最终生成二维地形图)

N=300
xy_center = [np.min(x)+((np.max(x)-np.min(x))/2),np.min(y)+((np.max(y)-    
np.min(y))/2)]   # center of the plot
radius = ((np.max(x)-np.min(x))/2)        # radius

z = data

xi = numpy.linspace(np.min(x), np.max(x), N)
yi = numpy.linspace(np.min(y), np.max(y), N)
zi = scipy.interpolate.griddata((x, y), z, (xi[None,:], yi[:,None]),     
method='cubic')
尝试进行类似的3d插值,数据、形状和坐标无法相加

d = data

xi = numpy.linspace(np.min(x), np.max(x), N)
yi = numpy.linspace(np.min(y), np.max(y), N)
zi = numpy.linspace(np.min(z), np.max(z), N)

int = scipy.interpolate.griddata((x, y, z), z, (xi[None,:],     
      yi[:,None],zi[:, None]), method='cubic')
我知道,在这里选择轴上的最小/最大值也不是正确的做法,但我不确定还要做什么

我确实弄明白了如何绘制通道的x,y,z坐标的3d散点图

x = np.array([  84.06,   83.74,   41.69,   51.87,   57.01,   51.84,    
    41.16, 21.02,   24.63,   21.16,  -16.52,  -13.25,  -11.28,    
   -12.8 , -16.65,  -48.48,  -48.77,  -48.35,  -75.17,  -80.11,     
   -82.23, -80.13,  -75.17, -114.52, -117.79, -114.68])                                                                                                                           

y = np.array([-26.81,  29.41, -66.99, -48.05,   0.9 ,  50.38,      
    68.71, -58.83, 0.57,  60.29, -83.36, -65.57,   0.23,  66.5 ,   
   -65.51, -0.42,  65.03, -71.46, -55.07,  -0.87,  53.51,  71.1 , 
   -28.98, -1.41,  26.89])

z = np.array([-10.56, -10.04, -15.96,  39.87,  66.36,  41.33, -15.31, 
    54.82, 87.63,  55.58, -12.65,  64.98,  99.81,  65.11, -11.79,     
    68.57, 98.37,  68.57,  -3.7 ,  59.44,  82.43,  59.4 ,  -3.69,      
    9.67, 15.84, 9.45])

data = [  884007.64101968,   997175.31684776,   853520.29922077,
    1146032.72839618,  1280654.00515894,  1136783.42927035,
     781802.02852187,  1165581.44354253,  1474539.74412991,
    1074018.46853295,   578909.21492644,  1067652.55432892,
    1508963.49572301,  1012764.69535714,   533385.60827991,
    1058268.82537597,  1392128.01175867,  1043996.55697014,
     675548.3896822 ,  1022400.8910867 ,  1360502.28709052,
    1108773.44991746,   780841.92929488,   986799.48807626,
     947189.96382125,   994734.32179115])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(x, y, z)
plt.show()

我很抱歉说得不太准确,但我完全不知道……

您不必重新塑造1D数据,它们属于额外维度(时间)。要使用三维模型进行绘图,您必须将三维模型简化为二维模型,并使用EEG传感器的三维模型,或者必须简化EEG传感器数据(例如,平均值等)。或者,你也可以制作一部电影。我认为3D方法的问题在于,你在立方体中插值
数据
值,而你想在由头骨形状给出的曲面上插值。因此,首先要定义一个曲面,例如使用
scipy.spatial
中的Delaunay三角剖分,然后在该曲面上插值<
scipy.interpolate
中的code>CloughTocher2DInterpolator可能符合要求(但我从未使用过)。然而,就我个人而言,我会首先检查是否有其他人还没有解决这个问题。对于这样的事情,我想到了。