私は、均一な円の異なる半径で強度の読み取り値を記入したnumpy配列を持っています(コンテキストの場合、これは原始星形成モデルの1D放射伝達プロジェクトです:より良いモデルが存在する、私の上司は、私が他人の仕事の仕方を理解するように、私は1つの生産の経験を持っていませんでした)。半径方向の強度の1次元配列を空間強度の2次元配列に回転
私はその1次元アレイを円で回転させて、強度の2D配列を作成して、imshow(または、少しの作業では、aplpy)で表示することができます。最終的な配列は2次元でなければならず、投影は極座標ではなくデカルトでなければなりません。
ネストしたforループで行うことができますが、ルックアップテーブルで行うことができますが、numpyなどでうまくいく方法がなければならないと感じています。
アイデア?
EDIT:
私は戻って、私が前に持っていたforループやif文の私(率直に恐ろしい)混乱を再作成しなければなりませんでした。私が本当に試してみたら、物事を凝縮することでループの1つとif文の1つを取り除くことができます。しかし、目的はforループで動作させることではなく、配列を回転させる方法が組み込まれているかどうかを確認することです。 impBは前に述べたものとは少し異なる配列です。実際にはパーティクルが検出された半径のリストです。次に、半径ビンにそれらのビンを入れて、各半径で強度(または希望する場合は頻度)を取得します。 Rは、無次元の方法でモデルを実行するときに、自分の半径のスケールファクタです。 iResは解像度の倍率で、ラジアルビンをサンプリングする頻度です。他のすべては明確でなければならない。
radJ = np.ndarray(shape=(2*iRes, 2*iRes)) # Create array of 2xRadius square
for i in range(iRes):
n = len(impB[np.where(impB[:] < ((i+1.) * (R/iRes)))]) # Count number of things within this radius +1
m = len(impB[np.where(impB[:] <= ((i) * (R/iRes)))]) # Count number of things in this radius
a = (((i + 1) * (R/iRes))**2 - ((i) * (R/iRes))**2) * math.pi # A normalisation factor based on area.....dont ask
for x in range(iRes):
for y in range(iRes):
if (x**2 + y**2) < (i * iRes)**2:
if (x**2 + y**2) >= (i * iRes)**2: # Checks for radius, and puts in cartesian space
radJ[x+iRes,y+iRes] = (n-m)/a # Put in actual intensity bins
radJ[x+iRes,-y+iRes] = (n-m)/a
radJ[-x+iRes,y+iRes] = (n-m)/a
radJ[-x+iRes,-y+iRes] = (n-m)/a
あなたがそれを実装している場合は、コードが虚偽を共有していますか? – Divakar
私のコードを実際の例で更新しました。 – Franz