为什么使用x =负载(“myFile.mat”) ?

8视图(30天)
K E
K E 2012年2月10日
编辑: Stephen23 2019年8月20日
我为什么要使用
newStructure =负载(“myFile.mat”);
而不是
负载(“myFile.mat”);
我认为这与记忆有关,但请开导我。

接受的答案

汪东城Doke
汪东城Doke 2012年2月17日
在某些情况下你可能会得到一个错误的答案。
例如,创建一个垫子文件,myFile。垫,一个变量命名 myfun = (1 2 3 4)。现在创建以下函数:
函数= myfun(中)
= sqrt ();
结束
然后创建你的测试函数:
函数=例子()
负载(“myFile.mat”);
= myfun (2);
结束
你的意图是指数变量的第二个元素 myfun 。但是当你运行这个,MATLAB调用函数 myfun ,因为在运行时MATLAB不能解析代码,知道垫文件包含一个变量 myfun
调用 负载 与一个输出告诉MATLAB,将会有一个已知的变量在工作区中:
函数=例子()
d =负载(“myFile.mat”);
= d.myfun (2);
结束
我相信这将工作:
函数=例子()
负载(“myFile.mat”,“myfun”);
= myfun (2);
结束
1评论
K E
K E 2012年2月22日
非常感谢这澄清。

登录置评。

更多的答案(2)

Stephen23
Stephen23 2017年8月21日
编辑:Stephen23 2019年8月20日
从讨论后 这个答案 :
“为什么人们永不mat文件加载到工作区吗?”
因为 负载 吸引到一个结构是一种简单的方法:
  1. 避免无意义的bug,因为变量跟踪更简单。
  2. 使输入检查更简单,如果用户想要查看输入值。
  3. 允许任意或固定数量的参数处理。这是非常有用的可选参数的任何过程。
  4. 允许静态代码检查工具有效地工作。
  5. 防止意外覆盖现有的变量。
  6. 允许MATLAB JIT代码优化加载数据,高效工作。
  7. 允许MATLAB解析器来唯一地标识变量和函数。
  8. 使它非常简单有效地处理所有字段(如循环编号字段)。
  9. 写清楚是容易理解的代码,这样可以减少错误。
相比使用 负载 直接进入工作区:
  1. 有意外覆盖现有的不必要的风险变量。
  2. 没有提供有效的方法检查加载了哪些变量。
  3. 阻碍了JIT代码优化。
  4. 模棱两可的解析器对象引用(例如例子)。
  5. 使调试更加困难变量不能被追踪的起源。
  6. …这也意味着静态代码检查工具并不是有效的。
  7. 允许变量加载然后编号无法访问效率没有写慢,童车,混淆代码。
“所以你建议每个人应该总是垫文件加载到结构,然后从结构阅读。”
是的。有经验的MATLAB用户编写的代码 负载 - s结构,因为它是更有效率,更容易调试,更可靠。经验丰富的MATLAB用户给这个建议初学者,因为一些初学者有兴趣学习如何编写高效、可靠的代码,例如:
这也是TMW员工给的建议,例如:
”和命令他不是一模一样的命令谁”
这两个 运行时自省,MATLAB文档状态,并非有效: “运行时自省是计算昂贵的”

埃里克
埃里克 2012年2月17日
我认为这更多的与代码可读性。如果你使用后者形式在工作区中创建变量的方式,从那里他们尚不清楚。前很明显,变量从垫子上加载文件。
我使用两次。如果我使用后者形式通常表明变量添加注释被添加到工作区中。
埃里克
2的评论
1月
1月 2017年8月21日
喜欢:
FileData =负载(“myFile.mat”,“oldStruct”);
newStruct = FileData.oldStruct;
保持工作区整洁和支持JIT代码的加速度。金宝app

登录置评。

类别

找到更多的在范围变量并生成名称帮助中心文件交换

下载188bet金宝搏

社区寻宝

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

开始狩猎!