【问题标题】:R to Python for loop translationR 到 Python 的循环翻译
【发布时间】:2022-02-10 20:36:53
【问题描述】:

我要翻译以下R代码:

k =5 
Ret = as.data.frame(sapply(1:k, function(i) rnorm(k) ) )

deltas=NULL
for (i in 1:k) {
  y = Ret[,i]  
  mvalue = mean(y)
  minvec = NULL
  for (j in 1:length(y))
  {
    minvechelp = min(0,(y[j]-mvalue))
    minvec[j] = minvechelp
  }
  delta=sqrt(sum(minvec^2)/length(y))
  deltas = cbind(deltas,delta)
}
deltas

它实现了数据帧的碰撞平均值,然后取数据帧的长度来计算包含最小计算的参数 delta,但我认为 df 已转换为向量。

在 Python 中,我的努力是:

k= 5
A = pd.DataFrame(
      [np.random.randn(k) for i in range(k)]
   )
A.size
deltas = []
for i in range(0,k):
    y = Ret.iloc[:,i]  
    mvalue = np.mean(y)
    minvec = []
    for j in range(0,y.size):
        minvechelp = min(0,(y[j]-mvalue))
        minvec[j] = minvechelp
  
    delta=np.sqrt(sum(minvec**2)/y.size())
    deltas = np.hstack((deltas,delta))

deltas

但我收到一个错误

KeyError: 0

我的错误在哪里,我该如何解决?有什么帮助吗?

【问题讨论】:

  • KeyError: 0 起源于哪一行?
  • @Daweo 在minvechelp = min(0,(y[j]-mvalue))
  • 对于 R 代码的价值,可以大幅改进,生成的(无循环)代码可能更容易转换为等效的 numpy 代码。
  • @KonradRudolph 欢迎任何帮助
  • @Oliver 感谢您的简化。在 python 中阅读 here 它有助于将扫描函数从 R 转换为 python,但我找不到参数 STATS。我认为它只有在 pandas 中等效的 FUN 参数

标签: python r dataframe


【解决方案1】:

Oliver 在 cmets 的帮助后,我发现答案是:

mvalue = Ret.mean(axis=0);mvalue
Res = Ret - mvalue;Res
Res[Res>=0] = 0;Res
Res2 = Res**2
cs = Res2.sum(axis=0);cs
delta = np.sqrt(cs/Ret.shape[0]) 
delta

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2022-01-18
    • 2020-04-29
    • 2021-02-20
    • 1970-01-01
    • 2020-04-17
    • 2023-01-24
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多