2016-12-28 4 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

Я не думаю, что это подходящее место для такого вопроса. Поскольку вы ищете функцию «один-к-одному», это математическая проблема, а не программирующая. – DeepSpace

+0

Каковы пределы двух столбцов - Col0 min, max и аналогично для 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). Значения будут целыми и всегда будут уникальными.

Смежные вопросы