2016-09-12 20 views
0

私のような等間隔の3Dマトリックスから任意の2点間の補間直線抽出する:、3Dマトリックスmatrixnumpy行列から任意の値の行を抽出する方法は?

data_points_on_line=extract_line_from_3D_matrix(matrix,point1,point2,number_of_data_values_needed) 

を開始および終了点point1point2との間で返されるデータの解像度point1およびpoint2は、number_of_data_values_neededの整数で与えられる。

scipy.ndimageで2次元配列からデータを抽出するのはかなりシンプルだと知っていますが、すでにscipyにあるか、それとも3Dで行うことができる関数があるのか​​を知っていますか?

事前に感謝します。

+1

が鳴ります。 2dのケースで何をするのか、それが3dでうまくいかない理由を正確に示すことができますか?このようにすれば、問題を理解しやすくなります。 – dnalow

+0

ok。私はその機能をチェックします。 2dで私はこのようにします:[リンク](http://stackoverflow.com/questions/7878398/how-to-extract-an-arbitrary-line-of-values-from-a-numpy-array)マトリクス内のどこかの点は、基本的に3つの空間次元のデータ値に依存する。 – rennau

答えて

1

それは例えば、InterpolatingFunctionにを使用して私の作品:scipy.interpolate.LinearNDInterpolatorは助けになることができように

#!/usr/bin/python 
import numpy as np 

from Scientific.Functions.Interpolation import InterpolatingFunction 

def linear_interp_3d(point1,point2,spacing): 
    xi=np.linspace(point1[0],point2[0],spacing) 
    yi=np.linspace(point1[1],point2[1],spacing) 
    zi=np.linspace(point1[2],point2[2],spacing) 

    return xi,yi,zi 

n=4 
x = np.arange(0, n, 1) 
y = np.arange(0, n, 1) 
z = np.arange(0, n, 1) 

data = np.ones(shape = (n, n, n)) 
for dummy in range(n): 
    data[dummy,:,:]=dummy**3 
axes = (x,y,z) 
f = InterpolatingFunction(axes, data) 

point1=(0,0,0) 
point2=(3,3,3) 
linevals=linear_interp_3d(point1,point2,11) 

line=[] 
for dummy in range(len(linevals[0][:])): 
    line.append(f(linevals[0][dummy],linevals[1][dummy],linevals[2][dummy])) 
print line 
関連する問題