Есть ли функция NumPy для возврата первого индекса чего-либо в массиве?

не уверен, если вы говорите LinqToSql или просто linq ... но вы можете использовать регулярные выражения следующим образом:

.Where(dto => System.Text.RegularExpressions.Regex.IsMatch(dto.CustomerName, @"Ad"));
402
задан waterproof 29 March 2019 в 02:50
поделиться

5 ответов

Да, вот ответ, учитывая массив NumPy, array, и значение, item, для поиска:

itemindex = numpy.where(array==item)

результатом является кортеж с первым все индексы строки, затем все индексы столбца.

, Например, если бы массив является двумя размерами и он содержал Ваш объект в двух местах затем

array[itemindex[0][0]][itemindex[1][0]]

, было бы равно Вашему объекту, и так будет

array[itemindex[0][1]][itemindex[1][1]]

numpy.where

476
ответ дан C. Braun 29 March 2019 в 12:50
поделиться

Для индексации на любых критериях Вы можете так что-то как следующее:

In [1]: from numpy import *
In [2]: x = arange(125).reshape((5,5,5))
In [3]: y = indices(x.shape)
In [4]: locs = y[:,x >= 120] # put whatever you want in place of x >= 120
In [5]: pts = hsplit(locs, len(locs[0]))
In [6]: for pt in pts:
   .....:         print(', '.join(str(p[0]) for p in pt))
4, 4, 0
4, 4, 1
4, 4, 2
4, 4, 3
4, 4, 4

И вот быстрая функция, чтобы сделать то, что делает list.index (), кроме не повышает исключение, если это не найдено. Остерегайтесь - это, вероятно, очень медленно на больших массивах. Вы можете, вероятно, патч обезьяны это на массивах, если Вы использовали бы его в качестве метода.

def ndindex(ndarray, item):
    if len(ndarray.shape) == 1:
        try:
            return [ndarray.tolist().index(item)]
        except:
            pass
    else:
        for i, subarray in enumerate(ndarray):
            try:
                return [i] + ndindex(subarray, item)
            except:
                pass

In [1]: ndindex(x, 103)
Out[1]: [4, 0, 3]
6
ответ дан Peter Mortensen 29 March 2019 в 02:50
поделиться

Существует много операций в NumPy, который мог, возможно, быть соединен для выполнения этого. Это возвратит индексы элементов, равных объекту:

numpy.nonzero(array - item)

Вы могли тогда взять первые элементы списков для получения единственного элемента.

4
ответ дан Peter Mortensen 29 March 2019 в 02:50
поделиться
  • 1
    Таким образом, они сделаны на ui уровне? использование селена говорит, или есть ли другой набор тестов, записанный, подобный комплекту модульного теста, но просто более широкий в объеме? – Marty Wallace 23 May 2013 в 19:13

Если Вы собираетесь использовать это в качестве индекса во что-то еще, можно использовать булевы индексы, если массивы broadcastable; Вам не нужны явные индексы. Абсолютный самый простой способ сделать это должно просто индексировать на основе значения истинности.

other_array[first_array == item]

Любые работы логической операции:

a = numpy.arange(100)
other_array[first_array > 50]

ненулевой метод берет булевские переменные, также:

index = numpy.nonzero(first_array == item)[0][0]

Эти два нуля для кортежа индексов (принимающий first_array, 1D), и затем первый объект в массиве индексов.

14
ответ дан Matt 29 March 2019 в 12:50
поделиться

Если вам нужен индекс первого вхождения только одного значения , вы можете использовать ненулевое значение (или где , что в данном случае означает то же самое):

>>> t = array([1, 1, 1, 2, 2, 3, 8, 3, 8, 8])
>>> nonzero(t == 8)
(array([6, 8, 9]),)
>>> nonzero(t == 8)[0][0]
6

Если вам нужен первый индекс каждого из многих значений , вы, очевидно, можете повторять то же самое, что и выше, но есть уловка, которая может быть Быстрее. Следующая команда находит индексы первого элемента каждой подпоследовательности :

>>> nonzero(r_[1, diff(t)[:-1]])
(array([0, 3, 5, 6, 7, 8]),)

Обратите внимание, что она находит начало обеих подпоследовательностей из 3 и обеих подпоследовательностей из 8:

[ 1 , 1, 1, 2 , 2, 3 , 8 , 3 , 8 , 8]

Таким образом, это немного отличается от поиска первого появления каждого значения. В своей программе вы можете работать с отсортированной версией t , чтобы получить то, что вы хотите:

>>> st = sorted(t)
>>> nonzero(r_[1, diff(st)[:-1]])
(array([0, 3, 5, 7]),)
64
ответ дан 22 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: