Matlab数组(:)扁平化操作转Python实现结果不匹配解决方案咨询
解决方案
要匹配Matlab(:)按列优先扁平化数组的逻辑,只需要给numpy的ravel函数指定order='F'参数即可,修改后的代码如下:
import numpy as np lP = np.ravel(lP, order='F') / len(np.ravel(lP, order='F')) lM = np.ravel(lM, order='F') / len(np.ravel(lP, order='F'))
补充说明
- Matlab数组默认采用列优先(Fortran顺序)存储,
(:)操作会按列遍历元素完成扁平化 - numpy的
ravel默认参数为order='C',也就是按行优先(C语言顺序)遍历数组,指定order='F'后就会切换为列优先遍历,和Matlab逻辑完全对齐 - 也可以用
flatten(order='F')实现相同效果,二者的区别是flatten一定会返回新数组,ravel在内存布局允许的情况下会返回原数组的视图,性能更优
内容的提问来源于stack exchange,提问作者material bug
相关产品推荐
相关产品推荐

