найти кортеж в ndarray кортежей и вернуть индекс искомого кортежа - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть словарь с записью координат в виде ndarray кортежей,

import numpy as np

data = np.arange(0, 18)
coord = [(i, i, i) for i in data]
arr = np.empty(18, dtype=object)
arr[:] = coord
arr = arr.reshape(3, 6)

d = dict()
d.update({'coord': arr}) 

Я бы хотел запросить словарь с координатой и получить его индекс в массиве.

Когда я пытаюсь найти индекс с помощью np.where, он не возвращает совпадений.

np.where(d['coord'] == (0, 0, 0))
(array([], dtype=int64),)

В идеале это будет возвращать индекс (0, 0).

При предоставлении индекса для словарявходные и кортежные значения возвращаются True, поэтому кортеж существует в индексе.

d['coord'][0,0] == (0, 0, 0)
True

Могу ли я получить индекс таким образом ??

Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2019

Проблема заключается в тесте == массива объектов с кортежем.

In [346]: d['coord']                                                            
Out[346]: 
array([[(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5)],
       [(6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9), (10, 10, 10),
        (11, 11, 11)],
       [(12, 12, 12), (13, 13, 13), (14, 14, 14), (15, 15, 15),
        (16, 16, 16), (17, 17, 17)]], dtype=object)
In [347]: d['coord']==(0, 0, 0)                                                 
/usr/local/bin/ipython3:1: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
  #!/usr/bin/python3
Out[347]: False

Решение состоит в том, чтобы сравнить один массив объектов с другим массивом объектов:

In [348]: x=np.array(None); x[()]=(0,0,0)                                       
In [349]: x                                                                     
Out[349]: array((0, 0, 0), dtype=object)
In [350]: d['coord']==x                                                         
Out[350]: 
array([[ True, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...