小编RK1*_*RK1的帖子

为什么 numpy 随机种子没有保持固定但 RandomState 在并行运行时是?

我运行蒙特卡罗模拟并行使用joblib。然而,我注意到虽然我的种子是固定的,但我的结果一直在变化。但是,当我连续运行该过程时,它如我所料保持不变。

下面我实现了一个小例子,模拟具有较高方差的正态分布的均值。

加载库并定义函数

import numpy as np
from joblib import Parallel, delayed

def _estimate_mean():
    np.random.seed(0)
    x = np.random.normal(0, 2, size=100)
    return np.mean(x)
Run Code Online (Sandbox Code Playgroud)

串联实现的第一个示例- 结果都与预期相同。

tst = [_estimate_mean() for i in range(8)]
In [28]: tst
Out[28]:
[0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897]
Run Code Online (Sandbox Code Playgroud)

在 Parallel 中实现的第二个例子:(注意有时手段是一样的,其他时候不一样)

tst = Parallel(n_jobs=-1, backend="threading")(delayed(_estimate_mean)() for i in range(8))

In [26]: tst
Out[26]:
[0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.1640259414956747,
 -0.11846452111932627,
 -0.3935934130918206]
Run Code Online (Sandbox Code Playgroud)

我希望并行运行与固定种子相同。我发现如果我实施RandomState修复种子似乎可以解决问题:

def _estimate_mean():
    local_state …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numpy random-seed

8
推荐指数
1
解决办法
1160
查看次数

pandas 通过排除日期范围对 DatetimeIndex 进行过滤

我目前有一个pandas.DataFrame,其中有一个pandas.DatetimeIndex和一组值。

我想从此排除给定的所有日期。pandas.date_rangepandas.DataFrame

示例代码:

dates = pd.date_range(start='04/01/2012', end='04/01/2019', freq='MS')
df = pd.DataFrame(data=[100]*len(dates),index=dates,columns=["val"])

exclusion_dates = pd.date_range(start='04/01/2012', end='04/01/2019', freq=pd.offsets.DateOffset(months=12))
Run Code Online (Sandbox Code Playgroud)

我的尝试:

df.loc[~exclusion_dates,:]
Run Code Online (Sandbox Code Playgroud)

理想情况下,这将导致df包含1st April YYYY

但是,这会导致以下错误:

类型错误:一元 ~ 的操作数类型错误:“DatetimeIndex”

我查看了下面的线程,但是找不到任何内容: Filtering Pandas DataFrames on date

python dataframe pandas

7
推荐指数
1
解决办法
5301
查看次数

DataError:没有使用平均聚合函数而不是总和的数字类型?

我想知道是否有人可以使用 agg() 帮助解释以下行为

import numpy as np
import pandas as pd
import string
Run Code Online (Sandbox Code Playgroud)

初始化数据帧

df = pd.DataFrame(data=[list(string.ascii_lowercase)[0:5]*2,list(range(1,11)),list(range(11,21))]).T
df.columns = columns=['g','c1','c2']

df.sort_values(['g']).head(5)

g   c1  c2
0   a   1   11
5   a   6   16
1   b   2   12
6   b   7   17
2   c   3   13
Run Code Online (Sandbox Code Playgroud)

例如,我在按 g 进行分组时对 c1 和 c2 求和并求平均值

无数据错误场景:

f = { 'c1' : lambda g: df.loc[g.index].c2.sum() + g.sum(), 'c2' : lambda g: (df.loc[g.index].c1.sum() + g.sum())/(g.count()+df.loc[g.index].c1.count())} 
df = df.groupby('g',as_index=False).agg(f)
Run Code Online (Sandbox Code Playgroud)

数据类型错误:

rnm_cols = dict(sum='Sum', mean='Mean') #, std='Std')
df …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

5
推荐指数
1
解决办法
6108
查看次数

将自定义 numba njit 函数应用于 pandas 滚动对象

随着pandas1.0.0 版本的发布,.apply现在可以使用函数了numba jit

.apply使用时有没有办法利用此功能.rolling

例如,我有一个pandas.DataFrame, 和一个numba_mean函数,我想应用它来获得 3 个周期的滚动平均值。

import pandas as pd
import numpy as np
import numba as nb

df = pd.DataFrame({"A" : np.random.rand(10)})
@nb.jit 
def numba_mean(x): 
    return np.sum(x) / len(x) 

df.A.rolling(3).apply(numba_mean)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误,这意味着它不适用于nopython模式。

编译回退到启用了循环提升的对象模式,因为函数“numba_mean”由于以下原因导致类型推断失败:非精确类型 pyobject

numba_mean应用withnjit而不是时的错误回溯jit

此错误可能是由以下参数引起的: - 参数 0:无法确定 Numba 类型<class 'pandas.core.series.Series'>

我想知道是否有办法将numbafied函数与pandas rolling对象一起使用?

python pandas numba

5
推荐指数
1
解决办法
5557
查看次数

pandas从csv文件中读取MultiIndex数据

我有一个MultiIndex csv文件,我想阅读.

数据保存在csv文件中,如下所示:

import pandas as pd
import numpy as np

dfcsv = pd.read_csv("/FilePath/MultiIndex_Example.csv")
dfcsv
Run Code Online (Sandbox Code Playgroud)

这实际上导致了以下数据框:

在此输入图像描述

Python Dataframe构造如下:( 轻松重建)

d = {'Country': ['City', 'PostCode','Day1','Day2','Day3'], 'UK': ['London', '123',47,42,40],'USA': ['New York', '456',31,22,58]}
dfstd = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)

但是,当我读入数据时,我需要第1列作为multiIndex.基本上创建一个数据框如下:

arrays = [['UK','USA'],['London','New York'],['123','456']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['Country', 'City','Postcode'])
df = pd.DataFrame(np.random.randn(3, 2), index=['Day1', 'Day2', 'Day3'], columns=index)
df.columns 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想知道是否有一种通过pd.read_csv或pd.MultIndex构造实现这一目标的简单方法?

仅供参考我尝试了以下但无法使其工作将 CSV加载到Pandas MultiIndex DataFrame

python pandas

4
推荐指数
1
解决办法
1598
查看次数

创建一个 numba 类型列表而不遍历 python 列表

我想使用一个numba.typed.List(将要调用它List)传递到我的函数中,该函数包含在njit. 然而这List应该从现有的 python 列表中创建。

当我查看文档时,它似乎是您创建一个的方式List是对其进行初始化,然后向其附加元素。但是,这需要您遍历 python 中已经存在的列表,这对于大型列表来说似乎效率低下。

例如:

from numba.typed import List
numba_list = List()
py_list = ["a", "b", "c"]
for e in py_list:
    numba_list.append(e)

In [17]: numba_list[0]
Out[17]: 'a'
Run Code Online (Sandbox Code Playgroud)

有没有办法在List不显式循环 python 列表的情况下将 a 设置为python 列表的值?

我正在使用numba.__version__= '0.47.0'

python numba

4
推荐指数
1
解决办法
1942
查看次数

在 R Plotly 中命名 3D 曲面图的图例

我想知道是否有一种方法可以命名由 plotly 为同一绘图上的多个表面显示的图例,相当于 trace 方法:

在 plotly 上使用多表面示例:

https://plot.ly/r/3d-surface-plots/

library(plotly)
    z <- c(
  c(8.83,8.89,8.81,8.87,8.9,8.87),
  c(8.89,8.94,8.85,8.94,8.96,8.92),
  c(8.84,8.9,8.82,8.92,8.93,8.91),
  c(8.79,8.85,8.79,8.9,8.94,8.92),
  c(8.79,8.88,8.81,8.9,8.95,8.92),
  c(8.8,8.82,8.78,8.91,8.94,8.92),
  c(8.75,8.78,8.77,8.91,8.95,8.92),
  c(8.8,8.8,8.77,8.91,8.95,8.94),
  c(8.74,8.81,8.76,8.93,8.98,8.99),
  c(8.89,8.99,8.92,9.1,9.13,9.11),
  c(8.97,8.97,8.91,9.09,9.11,9.11),
  c(9.04,9.08,9.05,9.25,9.28,9.27),
  c(9,9.01,9,9.2,9.23,9.2),
  c(8.99,8.99,8.98,9.18,9.2,9.19),
  c(8.93,8.97,8.97,9.18,9.2,9.18)
)
dim(z) <- c(15,6)
z2 <- z + 1
z3 <- z - 1

p <- plot_ly(showscale = FALSE) %>%
  add_surface(z = ~z) %>%
  add_surface(z = ~z2, opacity = 0.98) %>%
  add_surface(z = ~z3, opacity = 0.98)
Run Code Online (Sandbox Code Playgroud)

如果我将情节代码更改为以下内容:

p <- plot_ly(showscale = TRUE) %>%
  add_surface(z = ~z, name="Example 1") %>%
  add_surface(z = …
Run Code Online (Sandbox Code Playgroud)

r plotly

3
推荐指数
1
解决办法
1192
查看次数