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] < 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()的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用Which.max和Which.min函数定位数据对象中的第一个最大值或最小值实战:使用which.max函数查找第一个最大值的索引使用which.min函数查找第一个最小值的索引
R中的'which'函数返回row = 1而匹配值是否在第2行?
R nls2 函数 - 结果 [[which.min(ss)]] 中的错误:尝试在 get1index 中选择少于一个元素