2017-03-20 4 views
0

X軸で異なる2つのXYプロットを結合したいと考えています。 プロットはnumpy ndarrysで保持されています。私は結合演算を最適なものにするために、パフォーマンスを賢明にしたい(私は連想配列でこれを解決する方法を知っています)。2つのndarrysで最適に保持された2つのX-Yプロットを結合する方法

関節動作定義はPlotAB = join_op(PlotA,PlotB)ある:plotA[:,0]はX軸& plotA[:,1]ある

PlotA = 
array([[2, 5], 
     [3, 5], 
     [5, 5]) 
plotB[:,0]

は、X軸& plotB[:,1]ある

PlotB = 
array([[1, 7], 
     [2, 7], 
     [3, 7], 
     [4, 7]]) 

がY軸でありますY軸

配列は次のとおり

PlotAB[:,0]がて、joind X軸(ソートuniuq)である
PlotsAB = 
array([[1, n, 7], 
     [2, 5, 7], 
     [3, 5, 7], 
     [4, n, 7], 
     [5, 5, n]]) 

plotAB[:,1]は、PlotAのY軸である。

plotAB[:,2]は、PlotBのY軸である。

'n'は、このプロットに値がない場所を表します。

ところで、私は おかげで、dygraphs ploter(http://dygraphs.com/gallery/#g/independent-series

のためのデータを作成するためにこれを必要と助言してください。

+0

は、入力が最初の列(X軸)でソートされていますか?最初の列(X軸)をソートしたまま出力を構成しますか?あるいは、ちょうど尋ねられた最初の2つの質問に対してY軸がソートされていますか?また、PlotAまたはPlotBのいずれかに重複する点がありますか? – Divakar

+0

X軸はPlotAとPlotBの両方でソートされ、結果(PlotAB)もX軸でソートする必要があります。 –

答えて

0

ここでは、[x、NaN]要素が挿入された後に入力配列の各ユニークなx要素とnumpy.argsortを検索して入力配列をソートするソリューションです。

import numpy as np 

def join_op(a,b): 
    ax = a[:,0] 
    bx = b[:,0] 

    # elements unique to b 
    ba_x = np.setdiff1d(bx,ax) 

    # elements unique to a 
    ab_x = np.setdiff1d(ax,bx) 

    ba_y = np.NaN*np.empty(ba_x.shape) 
    ab_y = np.NaN*np.empty(ab_x.shape) 

    ba = np.array((ba_x,ba_y)).T 
    ab = np.array((ab_x,ab_y)).T 

    a_new = np.concatenate((a,ba)) 
    b_new = np.concatenate((b,ab)) 

    a_sort_idx = np.argsort(a_new[:,0]) 
    b_sort_idx = np.argsort(b_new[:,0]) 

    a_new_sorted = a_new[a_sort_idx] 
    b_new_sorted = b_new[b_sort_idx] 

    b_new_sorted_y = b_new_sorted[:,1].reshape(-1,1) 

    return np.concatenate((a_new_sorted,b_new_sorted_y),axis=1) 

a = np.array([[2,5],[3,5],[5,5]]) 
b = np.array([[1,7],[2,7],[3,7],[4,7]]) 
c = combine(a,b) 

出力:

[[ 1. nan 7.] 
[ 2. 5. 7.] 
[ 3. 5. 7.] 
[ 4. nan 7.] 
[ 5. 5. nan]] 
+0

ワウ感謝waterboy5281 !!!非常にエレガント。 –

関連する問題