导入后this data file从 Matlab 和 scipy.io.loadmat 开始,一切似乎都工作正常,直到我们尝试计算其中一个矩阵的条件数。
这是为我们重现的最少代码量:
import scipy
import numpy
stuff = scipy.io.loadmat("dati-esercizio1.mat")
numpy.linalg.cond(stuff["A"])
这是 iPython 提供的扩展堆栈跟踪:
In [3]: numpy.linalg.cond(A)
---------------------------------------------------------------------------
LapackError Traceback (most recent call last)
/snip/<ipython-input-3-15d9ef00a605> in <module>()
----> 1 numpy.linalg.cond(A)
/snip/python2.7/site-packages/numpy/linalg/linalg.py in cond(x, p)
1409 x = asarray(x) # in case we have a matrix
1410 if p is None:
-> 1411 s = svd(x,compute_uv=False)
1412 return s[0]/s[-1]
1413 else:
/snip/python2.7/site-packages/numpy/linalg/linalg.py in svd(a, full_matrices, compute_uv)
1313 work = zeros((lwork,), t)
1314 results = lapack_routine(option, m, n, a, m, s, u, m, vt, nvt,
-> 1315 work, -1, iwork, 0)
1316 lwork = int(work[0])
1317 work = zeros((lwork,), t)
LapackError: Parameter a has non-native byte order in lapack_lite.dgesdd
所有明显的想法(例如展平和 reshape 矩阵或从头开始重新创建矩阵,逐个元素重新分配)都失败了。那么,我怎样才能对数据进行处理,使其更适合 numpy 呢?
最佳答案
这是一个错误,前段时间已修复:https://github.com/numpy/numpy/pull/235
解决方法:
np.linalg.cond(stuff['A'].newbyteorder('='))
关于matlab - 从 Matlab 文件导入时为 "LapackError: Parameter a has non-native byte order in lapack_lite.dgesdd",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123124/