28

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

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

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

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

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

3 回答 3

6
    >>> 其中 = lambda lst:list(np.where(lst)[0])

    例子:
    >>> lst = map(lambda x:x<5, range(10))
    >>> lst
    [真,真,真,真,真,假,假,假,假,假]
    >>> 哪个(lst)
    [0, 1, 2, 3, 4]
于 2016-10-17T18:44:04.217 回答
4

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

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

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

感谢https://stackoverflow.com/users/601095/doboy用答案启发了我!

于 2012-08-31T16:40:35.157 回答
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
于 2012-08-31T00:06:50.577 回答