相当于R的Python应用于匿名函数

时间:2014-05-05 19:01:06

标签: python r numpy apply

在R中,这段代码运行良好:

denom <- matrix(c(0.1125588, 2.1722226, 0.5424582, 1.1727604,3.0524269 ,0.0524625 ,0.1752363 ,0.7198743,0.7282291 ,0.1646349 ,0.7574503, 2.3496857),3,4,byrow=TRUE)
indexM <- apply(denom,1,function(x) which(x==max(x)))
indexM
# 2 1 4

这是否接近Python等价物?它不起作用(AttributeError:'tuple'对象没有属性'ndim')

denom = np.array([[0.1125588, 2.1722226, 0.5424582], [1.1727604,3.0524269 ,0.0524625] ,[0.1752363 ,0.7198743,0.7282291] ,[0.1646349 ,0.7574503, 2.3496857]]);
indexM = np.apply_over_axes(lambda x,y: np.where(x == x.max(axis=1)) ,denom, axes=(0) );

1 个答案:

答案 0 :(得分:1)

您正在使用R和Python创建不同的数据。在R中,您可以创建包含3行和4列的数据,但在Python中,您可以创建包含4行和3列的数据。

修复后,为了得到你想要的东西,你可以denom.argmax(axis=1)

denom = np.array([
   [0.1125588, 2.1722226, 0.5424582, 1.1727604],
   [3.0524269 ,0.0524625,0.1752363 ,0.7198743],
   [0.7282291,0.1646349 ,0.7574503, 2.3496857]
])

>>> denom.argmax(axis=1)
array([1, 0, 3], dtype=int64)

(结果中的数字不同,因为Python使用基于0的索引,R使用基于1的索引,但它们指的是相同的位置。)