2016-12-01 2 views
0

私は比較的疎なEEGデータ(27電極)の頭部ビューヒートマップを作成しようとしています。私はEEG電極のx、yデカルト座標を極座標に変換し、そのようにマッピングしようとします。各x、y座標は、その場所の周りの色を対応させたいと思う所与の値(あなたが知りたいのであれば:ハースト指数)に対応します。griddata:QH6214 qhull入力エラー:最初のシンプレックスを作成するにはポイント(2)が足りません

私はthis pageの作業コードで作業を開始し、問題に適応しようとしました。残念ながら、私の適応は機能していません。

Traceback (most recent call last): 
File "/Users/mac/NIH/EEG/Python/Testing heat map", line 50, in <module> 
    data = griddata(points, values, (grid_r, grid_theta),fill_value=0) 
File "/Users/mac/anaconda/lib/python2.7/site-packages/scipy/interpolate/ndgriddata.py", line 217, in griddata rescale=rescale) 
File "scipy/interpolate/interpnd.pyx", line 246, in scipy.interpolate.interpnd.LinearNDInterpolator.__init__ 
    (scipy/interpolate/interpnd.c:4980) 
File "scipy/spatial/qhull.pyx", line 1747, in scipy.spatial.qhull.Delaunay.__init__ 
    (scipy/spatial/qhull.c:15918) 
File "scipy/spatial/qhull.pyx", line 415, in scipy.spatial.qhull._Qhull.__init__ 
    (scipy/spatial/qhull.c:5108) scipy.spatial.qhull.**QhullError: QH6214 qhull input error: not enough points(2) to construct initial simplex (need 33)** 

While executing: | qhull d Qbb Qt Q12 Qx Qz Qc Options selected for 
Qhull 2015.2.r 2016/01/18: run-id 1980533833 delaunay Qbbound-last 
Qtriangulate Q12-no-wide-dup Qxact-merge Qz-infinity-point 
Qcoplanar-keep _zero-centrum Qinterior-keep 
Q3-no-merge-vertices-dim-high 

太字の部分は、私が理解しようとしているものです:私はエラーを取得する

from __future__ import division, print_function, absolute_import 
from pylab import * 
import numpy as np 
from scipy.interpolate import griddata 


# Setting the paremeters that define the circle 
max_r = 1 
max_theta = 2.0 * np.pi 

###Cartesian coordinates of the 27 electrodes 
###x axis goes from back of head to nose, with nose being the positive direction 
###y axis goes from ear to ear, with toward right ear (from perspective of self) being the negative direction 
# X coordinates 
X = [0.95, 0.95, 0.673, 0.673, 0.000000000000000044, 0.000000000000000044, 
    -0.673, -0.673, -0.95, -0.95, 0.587, 0.587, 0.0000000000000000612, 0.0000000000000000612, 
    -0.587, -0.587, 0.719, 0.00000000000000000000000000000000375, -0.719, 
    0.375, 0.375, 0.999, -0.999, -0.375, -0.375, -0.9139, -0.9139,.5,.6,.7,.8] 
# Y coordinates 
Y = [0.309, -0.309, 0.545, -0.545, 0.719, -0.719, 0.545, -0.545, 
    0.309, -0.309, 0.809, -0.809, 0.999, -0.999, 0.809, -0.809, 0, -0.0000000000000000612, 
    -0.0000000000000000881, 0.375, -0.375, 0, -0.000000000000000122, 0.375, -0.375, 0.2063, -0.2063,.5,.6,.7,.8] 


# Convert cartesian coordinates to polar 
def convert_to_polar(x, y): 
    theta = np.arctan2(y, x) 
    r = np.sqrt(x ** 2 + y ** 2) 
    return theta, r 

# Arrays that house the theta and radii from converted cartesian coordinates. 
Thetas = [] 
Rs = [] 

# Converting cartesian coordinates to polar, for each electrode 
for i in range(0, 31): 
    theta, r = convert_to_polar(X[i], Y[i]) 
    Thetas.append(theta) 
    Rs.append(r) 

# Making a two column list that contains the converted thetas and radii, so the appropriate shape is attained. 
points = [Thetas,Rs] 
values = [[.51,.71,.81,.91,.72,.87,.90,.67,.78,.89,.56,.45,.68,.96,.69,.63,.37,.85,.92,.70,.74,.97,.35,.76,.68,.46,.68,90,91,92,93], 
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,30,78,56,90]] 

# now we create a grid of values, interpolated from our random sample above 
theta = np.linspace(0.0, max_theta, 100) 
r = np.linspace(0, max_r, 200) 
grid_r, grid_theta = np.meshgrid(r, theta) 
data = griddata(points, values, (grid_r, grid_theta),fill_value=0) 

# Create a polar projection 
ax1 = plt.subplot(projection="polar") 
ax1.pcolormesh(theta, r, data.T) 
plt.show() 

は、ここに私のコードです。ポイントを追加すると(すなわち、極座標になるリストXとYにポイントを追加すると)、エラーが必要とするポイントの数が増え続けます。入力したポイントの数よりも2ステップ先行します。

これに対処する方法はありますか?

答えて

1

griddataの最初の引数は、形状が(n, D)である必要があります。nはポイントの数であり、Dはそれらのポイントのディメンションです。 に合格しました。ThetasRsは長さが31のリストです。その入力が2次元配列に変換されると、形状は(2, 31)になります。だからgriddataあなたは2つの31次元のポイントに合格したと思います。この問題を解決するには

それは例えば形状(31, 2)、持つ配列であるように、あなたはnumpy.column_stackを使用してpointsを作成することができます。:説明のため

points = np.column_stack((Thetas, Rs)) 
+0

ありがとうを! – philosonista

関連する問題