我们可以操作一个文件而不打开它吗
4视图(30天)
显示旧的评论
你好,
我有一个问题,我解释在咆哮。考虑下面的循环:
因为我= 1:10 ^ 6
一个=读一个csv文件;
一个=执行一些操作;
一个=执行保存操作;
结束
显然,大多数时间conssumming部分是阅读文件。如果我使用一个= csvread ();这是非常完善。如果我使用fopen的东西
计算conssuming便宜但时间。
你有一个想法rewduce计算时间我打算做什么?
我希望有一种方法去做上述操作实际上没有打开任何文件(更新现有文件并保存更新相同的文件没有打开它)。
任何想法?
提前谢谢!
Babak
答案(2)
马特·J
2022年11月25日
编辑:马特·J
2022年11月25日
如果你有一个文件,文件的读取和保存应该发生在循环之外。使用parfor循环遍历部分的数据,让他们在Matlab的记忆直到你准备保存所有的结果。
=读csv文件;
parfori = 1:10 ^ 6
(我:)=执行一些操作(我,:);
结束
一个=保存执行操作;
3评论
马特·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传入不同的初始条件
结束
等待对于一个工人来完成,使用一个超时
如果任何员工一直积极超过你想要的吗,取消()工人,结束
如果任何员工已经完成了,取他们的研究结果和更新最好的概念,结束
结束
当你会厌倦这一切,取消所有剩下的工人