2016-12-28 46 views
1

我想索引一個numpy數組與自定義索引。我明白,索引只能是整數。從兩個給定的整數進行唯一整數Python Numpy

有的兩個數字對我有看起來像:

400, 200 
300, 100 
500, 60 

我想從這副生成唯一的整數,這樣我可以用它們來索引numpy的陣列。像,

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

的問題是,我numpy的陣列的尺寸僅爲4000 * 2,怎樣才能從落入此範圍內4000對那些唯一標識符?

在此先感謝。

+0

我不認爲SO是這類問題的正確位置。當你在尋找一對一的功能時,這是一個數學問題,而不是編程問題。 – DeepSpace

+0

兩列的限制是什麼 - Col0最小值,最大值和Col1類似? – Divakar

回答

5

據我瞭解你的問題,你正在尋找一種方法來創建一對一的函數,以便使用另外兩個函數生成一個整數。看看下面的圖片,這是實現它的功能:

enter image description here

談到Python實現,這是我爲它的代碼(對於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) 

該指數獨一無二,因爲我總是能夠計算出最初的兩個整數。

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)。這些值將是整數,並且始終是唯一的。

相關問題