Подтвердить что ты не робот

Python эквивалент которого() в R

Я пытаюсь взять следующий оператор R и преобразовать его в Python с помощью NumPy:

1 + apply(tmp,1,function(x) length(which(x[1:k] < x[k+1])))

Есть ли эквивалент Python, для которого()? Здесь x является строкой в ​​матрице tmp, а k соответствует числу столбцов в другой матрице.

Ранее я попробовал следующий код Python и получил ошибку Value (операнды не могли быть переданы вместе с фигурами):

for row in tmp:
        print np.where(tmp[tmp[:,range(k)] < tmp[:,k]])
4b9b3361

Ответ 1

Ниже приведен код Python на мой вопрос:

np.array([1 + np.sum(row[range(k)] < row[k]) for row in tmp])

Здесь tmp - это 2d-массив, а k - переменная, которая была установлена ​​для сравнения столбцов.

Благодаря https://stackoverflow.com/users/601095/doboy, чтобы вдохновить меня на ответ!

Ответ 2

    >>> which = lambda lst:list(np.where(lst)[0])

    Example:
    >>> lst = map(lambda x:x<5, range(10))
    >>> lst
    [True, True, True, True, True, False, False, False, False, False]
    >>> which(lst)
    [0, 1, 2, 3, 4]

Ответ 3

Из http://effbot.org/zone/python-list.htm:

Чтобы получить индекс для всех совпадающих элементов, вы можете использовать цикл и передать начальный индекс:

i = -1
try:
    while 1:
        i = L.index(value, i+1)
        print "match at", i
except ValueError:
    pass