matlab - 从 Matlab 文件导入时为 "LapackError: Parameter a has non-native byte order in lapack_lite.dgesdd"

标签 matlab numpy python-2.7 scipy

导入后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/

相关文章:

python - 如何更改日期时间格式?

arrays - 在Matlab中将一个数组的变量放入另一个数组的一行中

matlab - 从 .fig 文件增加散点标记大小

python:如何使用unicode字符串打印变量中的字符

javascript - 来自 python 对象的 JSON 编码?

python - 如何使用 Python 将数组从球面坐标插值到笛卡尔坐标?

python-2.7 - 循环选择列表元素

arrays - Matlab:如何随机打乱矩阵的列

python - scipy 与 matlab 中的 dblquad 给出不同的结果

python - K-Means:将集群分配给新的数据点