Python相当于R中的which()

时间:2012-08-30 23:27:05

标签: python r indices which

我正在尝试使用以下R语句并使用NumPy将其转换为Python:

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

是否有Python等效于哪个()?这里, x 是矩阵 tmp 中的行, k 对应于另一个矩阵中的列数。

以前,我尝试了以下Python代码,并收到了值错误(操作数无法与形状一起广播):

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

3 个答案:

答案 0 :(得分:4)

下面的Python代码回答了我的问题:

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

此处 tmp 是一个二维数组, k 是为列比较设置的变量。

感谢https://stackoverflow.com/users/601095/doboy让我感到鼓舞!

答案 1 :(得分:4)

    >>> 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]

答案 2 :(得分:1)

来自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