どのように機能するか知りたいnumpy.gradient
です。勾配を使用して群速度を計算しようとしました(波束の群速度は、速度のグループではなく、波数に対する周波数の導関数です)。最初の 2 列は x 座標と y 座標で、3 列目はそのポイント (x,y) の頻度です。勾配を計算する必要があり、勾配定義である 2d ベクトルを期待していました
df/dx*i+df/dy*j+df/dz*k
そして、私の関数はxとyiの関数のみが次のようなものを期待していました
df/dx*i+df/dy*j
しかし、それぞれ 3 つの列を持つ 2 つの配列、つまり 2 つの 3D ベクトルを取得しました。最初は、2 つの合計が検索対象のベクトルになると思っていましたが、z 成分は消えません。私の説明が十分に明確であったことを願っています。どのようにnumpy.gradient
機能するか、それが私の問題にとって正しい選択であるかどうかを知りたいです。それ以外の場合は、使用できる他の Python 関数があるかどうかを知りたいです。
つまり、値の配列の勾配を計算したいのです:
data=[[x1,x2,x3]...[x1,x2,x3]]
ここで、x1、x2 は均一グリッド上のポイント座標 (ブリルアン ゾーン上の私のポイント) であり、x3 はそのポイントの周波数の値です。2 つの方向の導出手順も入力します。
stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)
y 方向も同様です。私はグリッド上にデータを構築しませんでした。私はすでにグリッドを持っています。これが、回答でここに示されているような例が役に立たない理由です。より適切な例には、私が持っているような点と値のグリッドが必要です:
data=[]
for i in range(10):
for j in range(10):
data.append([i,j,i**2+j**2])
data=array(data,dtype=float)
gx,gy=gradient(data)
私が追加できるもう1つのことは、私のグリッドは正方形ではなく、2Dクリスタルのブリルアンゾーンである多角形の形をしていることです.
私がnumpy.gradient
探しているものではなく、値の正方形のグリッドでのみ適切に機能することを理解しました。元のデータのポリゴンの外側にゼロがたくさんあるグリッドとしてデータを作成しても、勾配に非常に高いベクトルが追加され、計算の精度に (マイナスに) 影響します。このモジュールは、私にはツールというよりおもちゃのように思えますが、厳しい制限があります。
辞書を使用して問題を解決しました。