【发布时间】:2018-11-21 21:02:38
【问题描述】:
在尝试对该区域应用鞋带公式时,我在R 和Python 的处理方式上发现了一个有趣的差异。在Python 中,可以直接使用nympy 功能:
import numpy as np
import pandas as pd
d = {"A": [2, 3, 1, 2], "B": [4, -8, 2, 4]}
df = pd.DataFrame(data=d)
area = 0.5 * np.abs(np.dot(df[df.columns[0]], np.roll(df[df.columns[1]], 1)) -
np.dot(df[df.columns[1]], np.roll(df[df.columns[0]], 1)))
area
7.0
但是,我没有在 R 中使用 crossprod (%*%) 函数做同样的事情,但只有这样的基本迭代:
get_area <- function(x, y) {
add.val <- sub.val <- NA
for(i in 1:(length(x) - 1)) {
add.val[i] <- 0.5 * x[i] * (y[i + 1])
sub.val[i] <- 0.5 * y[i] * (x[i + 1])
}
return(abs(sum(add.val) - sum(sub.val)))
}
R 有没有更高效的东西?
【问题讨论】: