我正在尝试将我的蒙特卡罗模拟转换numpy为dask,因为有时数组太大,无法适应内存.因此,我在云中设置了一组计算机:我的dask集群由24个内核和94 GB内存组成.我为这个问题准备了我的代码的简化版本.
我的原始numpy代码如下所示:
def numpy_way(sim_count, sim_days, hist_days):
historical_data = np.random.normal(111.51, 10, hist_days)
historical_multidim = np.empty(shape=(1, 1, sim_count, hist_days))
historical_multidim[:, :, :, :] = historical_data
random_days_panel = np.random.randint(low=1,
high=hist_days,
size=(1, 1, sim_count, sim_days))
future_panel = historical_multidim[np.arange(1)[:, np.newaxis, np.newaxis, np.newaxis],
np.arange(1)[:, np.newaxis, np.newaxis],
np.arange(sim_count)[:, np.newaxis],
random_days_panel]
return future_panel.shape
Run Code Online (Sandbox Code Playgroud)
注意:我只是在这里返回numpy数组的形状(但是因为它是numpy,所以future_panel的元素在内存中是有意义的.
关于功能的一些话:
historical_data- 这只是1Dhistorical_multidim).这里不使用前两个维度(但它们在我的最终应用程序中)
forecasted未来的天数random_days_panel- 只是一个ndarray随机选择的日子.所以shape这个数组的最后一个是:1,1,sim_count,sim_days(在上一点解释)future_panel是ndarray随机选取的值historical_multidim.即从具有预期形状的历史数据生成的数组(1,1,sim_count,sim_days)现在,问题是,其中一些步骤没有在dask中实现:
historical_multidim[:, …我的SQL服务器中有以下多对多关系(见下图).

在大多数情况下,表tblWavelengths中有2行与表tblSensors相关,(在某些情况下只有1行,在极端情况下可能有20行)
我做了以下简单查询来从这3个表中检索数据:
select W.DateTimeID,S.SensorName,S.SensorType,W.Channel,W.PeakNr,W.Wavelength
from tblWavelengths as W
Left Join tblSensorWavelengths as SW on W.tblWavelengthID = SW.WavelengthID
Left Join tblSensors as S on SW.SensorID = S.SensorID
order by W.DateTimeID
Run Code Online (Sandbox Code Playgroud)
运行此查询后,我得到以下结果:

这是我的问题.我想写一个查询,它只过滤那些在给定时刻(DateTimeID)在tblWavelengths表中有两行(两个不同波长)的传感器(SensorName).因此,例如,我希望得到没有77902/001传感器的结果 - 因为它在给定的时刻只有一行(一个波长)与tblSensors相关
这是对我之前问题的更新:多对多的关系
以前的解决方案工作正常,但现在我想要tgo一点点改善结果.我希望将所有波长值放在一行中.
因此,而不是以下结果:
DateTimeID Wavelength SensorID
11435 1581,665 334
11435 1515,166 334
11435 1518,286 335
Run Code Online (Sandbox Code Playgroud)
我想要有类似的东西:
DateTimeID Wavelength1 Wavelength2 SensorID
11435 1581,665 1515,166 334
11435 1518,286 335
Run Code Online (Sandbox Code Playgroud)