这是我第一次尝试并行处理,我一直在研究Dask,但实际编写它时遇到了麻烦.
我已经看过他们的示例和文档,我认为dask.delayed效果最好.我试图用延迟(function_name)包装我的函数,或者添加一个@delayed装饰器,但我似乎无法让它正常工作.我更喜欢Dask而不是其他方法,因为它是用python制作的,并且它(假设的)简单.我知道dask在for循环中不起作用,但是他们说它可以在循环中工作.
我的代码通过一个包含其他函数输入的函数传递文件,如下所示:
from dask import delayed
filenames = ['1.csv', '2.csv', '3.csv', etc. etc. ]
for count, name in enumerate(filenames)"
name = name.split('.')[0]
....
Run Code Online (Sandbox Code Playgroud)
然后做一些预处理ex:
preprocess1, preprocess2 = delayed(read_files_and_do_some_stuff)(name)
Run Code Online (Sandbox Code Playgroud)
然后我调用一个构造函数并将pre_results传递给函数调用:
fc = FunctionCalls()
Daily = delayed(fc.function_runs)(filename=name, stringinput='Daily',
input_data=pre_result1, model1=pre_result2)
Run Code Online (Sandbox Code Playgroud)
我在这里做的是将文件传递给for循环,进行一些预处理,然后将文件传递给两个模型.
关于如何并行化这个的想法或提示?我开始得到奇怪的错误,我不知道如何修复代码.代码确实有效.我使用了一堆pandas数据帧,系列和numpy数组,我宁愿不回去更改所有内容以使用dask.dataframes等.
我的评论中的代码可能难以阅读.这是一种更加格式化的方式.
在下面的代码中,当我输入print(mean_squared_error)时,我得到:延迟('mean_squared_error-3009ec00-7ff5-4865-8338-1fec3f9ed138')
from dask import delayed
import pandas as pd
from sklearn.metrics import mean_squared_error as mse
filenames = ['file1.csv']
for count, name in enumerate(filenames):
file1 = pd.read_csv(name)
df = pd.DataFrame(file1)
prediction = df['Close'][:-1]
observed = df['Close'][1:]
mean_squared_error = delayed(mse)(observed, …Run Code Online (Sandbox Code Playgroud) parallel-processing multithreading python-3.x python-multiprocessing dask
我有一个文件列表,我将其传递给for循环并执行一大堆功能.什么是最简单的并行化方法?不确定我能在任何地方找到这个确切的东西,我认为我当前的实现是不正确的,因为我只看到一个文件正在运行.从我已经完成的一些阅读中,我认为这应该是一个完全平行的案例.
旧代码是这样的:
import pandas as pd
filenames = ['file1.csv', 'file2.csv', 'file3.csv', 'file4.csv']
for file in filenames:
file1 = pd.read_csv(file)
print('running ' + str(file))
a = function1(file1)
b = function2(a)
c = function3(b)
for d in range(1,6):
e = function4(c, d)
c.to_csv('output.csv')
Run Code Online (Sandbox Code Playgroud)
(错误)并行化代码
import pandas as pd
from multiprocessing import Pool
filenames = ['file1.csv', 'file2.csv', 'file3.csv', 'file4.csv']
def multip(filenames):
file1 = pd.read_csv(file)
print('running ' + str(file))
a = function1(file1)
b = function2(a)
c = function3(b)
for d in range(1,6):
e = …Run Code Online (Sandbox Code Playgroud) 我一直在四处阅读熊猫文档here并尝试从here和here周围发布的问题中尝试不同的代码行,我似乎无法摆脱带有复制警告的设置。我更愿意学习以“正确”的方式对其进行编码,而不是仅仅忽略警告。
以下代码行在 for 循环中,我不想多次生成此警告,因为它可能会减慢速度。
我正在尝试创建一个名称为:'E'+vs 的新列,其中 vs 是 for 循环中列表中的一个字符串
但是对于他们中的每一个,我仍然收到以下警告,即使是最后 3 行:
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
Run Code Online (Sandbox Code Playgroud)
以下是我迄今为止尝试过的麻烦行:
#based on research, the first two seem to be the "wrong" way
df_out['E'+vs] = df_out[kvs].rolling(v).mean().copy()
df_out['E'+vs] = df_out[kvs].rolling(v).mean()
df_out.loc[:,'E'+vs] = df_out[kvs].rolling(v).mean().copy()
df_out.loc[:,'E'+vs] = df_out[kvs].rolling(v).mean()
df_out.loc[:,'E'+vs] = df_out.loc[:,kvs].rolling(v).mean()
Run Code Online (Sandbox Code Playgroud)
另一个给出 SettingWithCopyWarning 的是这样的:
df_out.dropna(inplace=True,axis=0)
Run Code Online (Sandbox Code Playgroud)
这个也发出了警告(但我认为这个会)
df_out = df_out.dropna(inplace=True,axis=0)
Run Code Online (Sandbox Code Playgroud)
如何正确执行这两个操作? …
我尝试使用 skimage 将 RGB 转换为 HSV 并获得我不期望的行为。这是我希望只产生蓝色的一些示例代码。这很重要(稍后),因为我想拍摄真实图像并通过参考色调来确定整个图像中每种颜色的存在量。
import numpy as np
import skimage as ski
import matplotlib.pyplot as plt
#define my own color in RGB, should be B
tested = np.ones(shape=(100,100,3))*200
tested[:,:,0] =0
tested[:,:,1] =0
hsv_test_img_arr=ski.color.rgb2hsv(tested)
hue_img = hsv_test_img_arr[:, :, 0]
sat_img = hsv_test_img_arr[:, :, 1]
value_img = hsv_test_img_arr[:, :, 2]
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(8, 2))
ax1.imshow(hue_img, cmap='hsv')
ax1.set_title('hue channel')
ax1.axis('off')
ax2.imshow(value_img)
ax2.set_title('value channel')
ax2.axis('off')
ax3.imshow(sat_img)
ax3.set_title('sat channel')
ax3.axis('off')
Run Code Online (Sandbox Code Playgroud)