2016-12-28 7 views
1

私はnumpy配列をカスタムインデックスでインデックスしようとしています。私はインデックスが整数だけであることを理解しています。与えられた2つの整数から一意整数を作るPython Numpy

400, 200 
300, 100 
500, 60 

私はインデックスにnumpyの配列をそれらを使用することができるように、このペアから一意の整数を生成したい:

私が持っている2数のペアのいくつかは次のようになります。同様に、

npArray[400200, 1] = someVal 
npArray[300100, 2] = someOtherVal 

問題は、私のnumpyの配列の大きさは、私は、この4000の範囲に該当するものをペアから一意の識別子を生成するにはどうすればよいだけで4000 * 2ですか?

ありがとうございます。

+0

私はSOがこの種の質問の正しい場所だとは思わない。あなたは1対1の機能を探しているので、これは数学の問題であり、プログラミングの問題ではありません。 – DeepSpace

+0

2つの列の制限は何ですか?Col0 min、max、Col1の場合も同様ですか? – Divakar

答えて

5

あなたの質問を理解する限り、他の2つの整数を使用して1つの整数を生成するために、1対1の関数を作成する方法を探しています。下の絵を見て、これはそれを実装する関数です:Pythonの実装についていえば

enter image description here

、ここではそれのための私のコードは、(Pythonの3.xのために)です:

def pack(i1, i2): 
    if i1 > i2: 
     return i1**2 + i2 
    else: 
     return (i2 + 1)**2 - 1 - i1 


def unpack(i): 
    mx = int(i**0.5) 
    s = (mx**2 + (mx + 1)**2 - 1) // 2 
    if s >= i: 
     return mx, mx - s + i 
    else: 
     return mx - i + s, mx 


i = pack(3, 5) 
print(i) # 32 

i1, i2, = unpack(i) 
print(i1, i2) # 3 5 

print(pack(400, 200)) # 160200 
print(unpack(160200)) # (400, 200) 

print(pack(300, 100)) # 90100 
print(unpack(90100)) # (300, 100) 

print(pack(500, 60)) # 250060 
print(unpack(250060)) # (500, 60) 

このインデックス私はいつも最初の2つの整数を計算することができるので、ユニークです。

0

あなたは中間のインデックスを作成し、numpyの配列のために、そのインデックス値を使用することができます。

List1 = [400,300,500,400] 
List2= [200,100,60,200] 

zipList = list(set(zip(List1,List2))) 

def getIndex(Val1,Val2): 
    a = zipList.index((Val1,Val2)) 
    return a 

print getIndex(400,200) 

回答:2

この2は現在のインデックスに配列を使用することができます。 zipList [2]は(400,200)を返します。値は整数で、常に一意になります。

関連する問題