Python 相当于 R 中的 which()

Posted

技术标签:

【中文标题】Python 相当于 R 中的 which()【英文标题】:Python equivalent of which() in R 【发布时间】:2012-08-25 18:42:59 【问题描述】:

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

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

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

之前尝试过下面的Python代码,收到了Value Error(操作数不能和shape一起广播):

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

【问题讨论】:

您正在编写两次tmp 脚本。您的意思是在循环内使用row 吗? 你的k来自哪里?你的tmp是什么形状的? 这个例子没问题,但是这个问题可以扩展到一个多维布尔数组,你希望在其中索引“真”值 这是一些相当模糊的 R 代码,用于表示“length(which(...)),我们只需要直接将布尔值sum(x[1:k] &lt; x[k+1]). 相关问题Pandas Equivalent of R's which() 【参考方案1】: >>> 其中 = lambda lst:list(np.where(lst)[0]) 例子: >>> lst = map(lambda x:x>> lst [真,真,真,真,真,假,假,假,假,假] >>> 哪个(lst) [0, 1, 2, 3, 4]

【讨论】:

虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案2】:

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

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

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

感谢https://***.com/users/601095/doboy 给了我灵感!

【讨论】:

【参考方案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

【讨论】:

这个更简单易读matchings_indices = [ i for i, x in enumerate(x) if x == value ]

以上是关于Python 相当于 R 中的 which()的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 等价于 R 的 which()

R语言使用Which.max和Which.min函数定位数据对象中的第一个最大值或最小值实战:使用which.max函数查找第一个最大值的索引使用which.min函数查找第一个最小值的索引

R中的'which'函数返回row = 1而匹配值是否在第2行?

定语从句中‘介词+which’的用法

R nls2 函数 - 结果 [[which.min(ss)]] 中的错误:尝试在 get1index 中选择少于一个元素

R中的一些基础1106