【问题标题】:Python equivalent of which() in RPython 相当于 R 中的 which()
【发布时间】: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]).

标签: python r indices


【解决方案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://stackoverflow.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 ]
    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2011-06-25
    • 2019-07-14
    • 2012-05-27
    • 2014-12-22
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多