加速整形/不使用整形 Matlab
Speed up reshape/ not use reshape Matlab
我有这个操作被调用了多次:
longRowVector;
matrix = reshape(longRowVector, n, n)';
answer = matrix(:);
这个使用整形的操作很慢。有没有办法在不使用重塑的情况下得到答案。
没有简单的方法可以加快速度。如果 n 超过一定数量(由您的相关缓存大小定义),内存访问的方式将在转置运算符期间排序。成本实际上是在转置操作中创建的。下面我绘制了不同矩阵大小的成本。在 360 左右有一个跳跃,这与我处理器上的缓存大小一致。
如果您想避免此命中,则需要创建 "cache-optimized" 重新排序策略,即在两个向量都适合缓存的 m*m 分块中执行重新排序。
我有这个操作被调用了多次:
longRowVector;
matrix = reshape(longRowVector, n, n)';
answer = matrix(:);
这个使用整形的操作很慢。有没有办法在不使用重塑的情况下得到答案。
没有简单的方法可以加快速度。如果 n 超过一定数量(由您的相关缓存大小定义),内存访问的方式将在转置运算符期间排序。成本实际上是在转置操作中创建的。下面我绘制了不同矩阵大小的成本。在 360 左右有一个跳跃,这与我处理器上的缓存大小一致。
如果您想避免此命中,则需要创建 "cache-optimized" 重新排序策略,即在两个向量都适合缓存的 m*m 分块中执行重新排序。