2016-12-11 9 views
1

私は線の方程式+/-幅20に基づいて値をnanに代入したいと思います。ここに記載されているeemRパッケージのeem_remove_scatteringメソッドで行われているように、ラマン2次散乱補正を実装しようとしています: https://cran.r-project.org/web/packages/eemR/vignettes/introduction.html このメソッドは表示されません。2次元配列中の任意の行の値をNANに代入

import numpy as np 
    ex = np.array([240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 
     305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 
     370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430, 
     435, 440, 445, 450]) 
    em = np.array([300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 
     326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 
     352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 
     378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 
     404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 
     430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 
     456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 
     482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 
     508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 
     534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 
     560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 
     586, 588, 590, 592, 594, 596, 598, 600]) 
    X, Y = np.meshgrid(ex, em) 
    z = np.sin(X) + np.cos(Y) 

私は適用したい式はEM =である - 私はこの行を(交差配列内のすべての値を設定したい2 EX /(0.00036 * EX-1)+ 500 +/- 20)をnansに設定します。単一の要素をnansに設定するのは簡単ですが、この方程式を配列に適用し、この行と交差する値だけをnansに設定するPython関数を見つけることはできませんでした。 希望する出力は、zと同じ次元を持つが、nanに相当する線と交差する値を持つ新しい配列になります。どのように進むべきかについての提案は非常に高く評価されます。フォームnp.where("condition for intersection", np.nan, z)

答えて

1

使用np.where:(0.00036 * EX-1)は、すべての値は-1に近いので、実際のところ

zi = np.where(np.abs(-2*X/(0.00036*X-1) + 500 - Y) <= 20, np.nan, z) 

、何の交点が- 2*ex/(0.00036*ex-1)を行っており、ここにはありません2*exの近くにあり、500を追加すると、emにある任意の値になります。しかし、原則としてこれは機能します。

さらに、これらの値をNaNに設定することで達成しようとしている目標は、masked arrayを使用するとよりよいと考えられます。

関連する問題