Matlab “性能/低级别”的含义;a(idx)=[]”等;vs";a=a(~idx)";
正如标题所说,我想知道Matlab在这两个选项之间有什么不同之处。为了便于论证,假设矩阵Matlab “性能/低级别”的含义;a(idx)=[]”等;vs";a=a(~idx)";,matlab,performance,low-level,Matlab,Performance,Low Level,正如标题所说,我想知道Matlab在这两个选项之间有什么不同之处。为了便于论证,假设矩阵a和idx足够大,可以处理内存问题,并定义: 案例A:A(idx)=[] 案例B:a=a(~idx) 我的直觉是,如果A执行值重新分配,CPU需要处理从原始位置到新排序位置的索引副本,同时跟踪同一矩阵的当前“头”,然后修剪多余的内存 另一方面,案例B将对新分配的内存空间执行索引大容量复制 所以,案例A可能比案例B慢,但内存需求更少。我的假设正确吗?我不知道,写完这篇文章后,我觉得案例B需要先执行案例A。。
a
和idx
足够大,可以处理内存问题,并定义:
- 案例A:
A(idx)=[]
- 案例B:
a=a(~idx)
提前感谢这很有趣,所以我决定采取措施: 我正在使用Windows(64位)版本的Matlab R2016a。
CPU:核心i5-3550,3.3GHz。 内存:8GB DDR3 1333(双通道) 结果:
Measure: a(idx) = [];
Elapsed time is 1.647617 seconds.
Measure: a = a(~idx);
Elapsed time is 0.732233 seconds.
Measure: not_idx = ~idx;
Elapsed time is 0.032649 seconds.
Measure: a = a(not_idx);
Elapsed time is 0.686351 seconds.
结论:
a=a(~idx)
的速度大约是a(idx)=[]
的两倍a=a(~idx)
的总时间等于not\u idx=~idx
加上a=a(not\u idx)
Matlab可能正在单独计算
~idx
,因此会消耗更多内存。仅当物理RAM处于完全消耗状态时,才使用内存消耗表。
我认为它可以忽略不计(
~idx
内存消耗是暂时的)我估计,完全优化的实现(在C中)要快10倍
这很有趣,所以我决定采取措施: 我正在使用Windows(64位)版本的Matlab R2016a。
CPU:核心i5-3550,3.3GHz。 内存:8GB DDR3 1333(双通道) 结果:
Measure: a(idx) = [];
Elapsed time is 1.647617 seconds.
Measure: a = a(~idx);
Elapsed time is 0.732233 seconds.
Measure: not_idx = ~idx;
Elapsed time is 0.032649 seconds.
Measure: a = a(not_idx);
Elapsed time is 0.686351 seconds.
结论:
a=a(~idx)
的速度大约是a(idx)=[]
的两倍a=a(~idx)
的总时间等于not\u idx=~idx
加上a=a(not\u idx)
Matlab可能正在单独计算
~idx
,因此会消耗更多内存。仅当物理RAM处于完全消耗状态时,才使用内存消耗表。
我认为它可以忽略不计(
~idx
内存消耗是暂时的)我估计,完全优化的实现(在C中)要快10倍
答案可能取决于
a
和idx
的大小,也可能取决于Matlab版本。为什么不自己选择这两个选项呢?答案可能取决于a
和idx
的大小,也可能取决于Matlab版本。为什么不自己选择这两个呢?