我们可以操作一个文件而不打开它吗

4视图(30天)
穆罕默德Shojaei Arani
穆罕默德Shojaei Arani 2022年11月24日
你好,
我有一个问题,我解释在咆哮。考虑下面的循环:
因为我= 1:10 ^ 6
一个=读一个csv文件;
一个=执行一些操作;
一个=执行保存操作;
结束
显然,大多数时间conssumming部分是阅读文件。如果我使用一个= csvread ();这是非常完善。如果我使用fopen的东西
计算conssuming便宜但时间。
你有一个想法rewduce计算时间我打算做什么?
我希望有一种方法去做上述操作实际上没有打开任何文件(更新现有文件并保存更新相同的文件没有打开它)。
任何想法?
提前谢谢!
Babak
8的评论
Stephen23
Stephen23 2022年11月25日
不读和写的文件在每个迭代。只使用和索引数组。

登录置评。

答案(2)

马特·J
马特·J 2022年11月25日
编辑:马特·J 2022年11月25日
如果你有一个文件,文件的读取和保存应该发生在循环之外。使用parfor循环遍历部分的数据,让他们在Matlab的记忆直到你准备保存所有的结果。
=读csv文件;
parfori = 1:10 ^ 6
(我:)=执行一些操作(我,:);
结束
一个=保存执行操作;
3评论
马特·J
马特·J 2022年11月25日
编辑:马特·J 2022年11月25日
我认为你不应该使用文件存储和检索优化结果。我想这样的循环结构,
我= 1000;
J = 300;
bestValue =正;
解决办法= [];
我= 1:我%遍历批次
(1:J) value =南;
(1:J) .Solution =南;
parforj = 1: j%做一批并行优化
[x, fval exitflag] =运行优化器
如果exiflag < 0%优化失败
继续
结束
s (j) value = fval;
s (j) .Solution = x;
结束
[minf k] = min ([s.Value]);
如果minf < bestVal
bestVal = minf;
解决办法= s (k) .Solution;
结束
结束

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2022年11月25日
我建议您切换到使用parfeval ()。约
你还没有得到厌倦了这一切
的数量活跃的工人数量小于内核
使用parfeval()来创建一个新的worker传入不同的初始条件
结束
等待对于一个工人来完成,使用一个超时
如果任何员工一直积极超过你想要的吗,取消()工人,结束
如果任何员工已经完成了,取他们的研究结果和更新最好的概念,结束
结束
你会厌倦这一切,取消所有剩下的工人
1评论
穆罕默德Shojaei Arani
穆罕默德Shojaei Arani 2022年11月26日
你好沃尔特,
这确实是一个很好的方法,!(我不知道这样的事情像parfeval之前)
然而,问题是,我在优化问题不设置任何终止条件(永远)工作。原因是我的问题非常复杂,很难知道多少时间优化解决需求和问题特定的。因此,这些都是“人类”应该检查而不是“机器”(好吧,我不是说这是不可能的代码,但是我认为在这个阶段的知识meta-heuristic搜索算法应该是困难的)。有时候,我得到一个解决方案,而快(如果停滞不发生)有时是相反的。很难告诉一个代码停止如果它变得停滞不前“慢”和“快速”的概念是相对的(当然,单一优化问题我可以想出一个近似的测量缓慢或牢度但我的代码应该解决任何通用的问题)。
所以,对我来说如果没有办法看到最好的结果(所有员工)在命令窗口中这不是有用的。所有到目前为止提金宝搏官方网站出的解决方案被认为有“终止标准”一名工人,这是瓶颈,排除了在命令窗口观察最好的结果(尽管所有工人仍woirking。实际上他们没有完成)。
我认为,在这一点上我承认我不能解决我的问题使用一个csv文件。因此,我使用几个csv文件(=数量的工人)。
谢谢!
Babak

登录置评。

类别

找到更多的在并行for循环(parfor)帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!