Python одноэлементный кортеж - PullRequest
0 голосов
/ 25 апреля 2018

Предположим, у меня есть матрица M и индексный набор idx=[(0,1),(2,3),(3,2)], и я хочу создать два набора кортежей idx_leq1, состоящих из тех кортежей, первый и второй элементы которых меньше или равны 1 и idx_geq2, состоящий из тех кортежей, чьи первый и второй элементы больше или равны 2.

Я хочу получить доступ к элементам M[idx_leq1] и M[idx_geq2].Я попытался idx_leq1 = tuple([e for e in idx if e[0]<=1 and e[1]<=1]), но это возвращает idx_leq1 = ((0,1),), который я не могу использовать для индексации M.С другой стороны, idx_geq2 = tuple([e for e in idx if e[0]>=2 and e[1]>=2]) = ((2,3),(3,2)) работает.

Как я могу решить это для случая, когда мой первый набор индексов состоит только из одной пары координат?Я не хочу делать M[idx_leq1[0]].

Я могу сделать: list(chain(*[(e,) for e in idx if e[0]<=1 and e[1]<=1])) и list(chain(*[(e,) for e in idx if e[0]>=2 and e[1]>=2])), но тогда мне все равно придется взять первый элемент за idx_leq1, тогда как я могу передать idx_geq2на M и возьмите соответствующие элементы.

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

[Проверено с numpy.mat]

[M[0, 1]] должно быть получено как в M[[0], [1]].При индексировании матрицы для многомерного индексирования списков местоположений требуется k списков индексов, каждый из которых работает с одним измерением.

Например, чтобы получить M[0, 3], M[1, 4], M[2, 5], нужно использовать M[[0, 1, 2], [3, 4, 5]].Другими словами, индекс, который вы указываете M, не должен рассматриваться как список координат.Скорее, это списки «координат в каждом измерении».
В вашем случае M[[0, 1]] (или его эквивалент в типе кортежа) выбирает M[0], M[1], поскольку [0, 1] считается работающим с первым измерением, ивторое измерение передается в эфир.

Ссылка: http://scipy -cookbook.readthedocs.io / items / Indexing.html # Индекс многомерного списка местоположений
Эта ссылкасчитает, что причина использования «списка dims» вместо «списка координат» заключается в том, чтобы сохранить количество экземпляров, поскольку распаковка многих кортежей может быть дорогой.

...