【问题标题】:Turning a python ndarray into a matlab file将 python ndarray 转换为 matlab 文件
【发布时间】:2013-11-16 21:09:42
【问题描述】:

所以我有一个已读入列表的 CSV 文件。我已将该列表转换为数组,并使用以下函数将该数组保存到 MATLAB 文件中。

def save_array(arr,filename):
    import scipy.io
    out_dict={}
    out_dict[filename]=arr
    scipy.io.savemat(filename + '.mat',out_dict)

但是,当我打开 MATLAB 文件时,出现了问题。当我在 Python 中打开时,我得到以下输出:

{'M': array([[u'153  ', u'81   ', u'0.28 ', ..., u'0.19 ', u'-0.07', u'1    '],
   [u'168  ', u'76   ', u'0.08 ', ..., u'0.98 ', u'0.42 ', u'0    '],
   [u'184  ', u'92   ', u'0.18 ', ..., u'0.92 ', u'0.75 ', u'0    '],
   ..., 
   [u'183  ', u'62   ', u'0.57 ', ..., u'0.87 ', u'0.31 ', u'0    '],
   [u'181  ', u'72   ', u'0.48 ', ..., u'0.91 ', u'1.2  ', u'0    '],
   [u'158  ', u'77   ', u'1.01 ', ..., u'0.99 ', u'0.88 ', u'0    ']], 
  dtype='<U5'),
 '__globals__': [],
 '__header__': 'MATLAB 5.0 MAT-file Platform: posix, Created on: Tue Nov  5 15:28:57 2013',
 '__version__': '1.0'}

为什么每个元素的开头都有u?我该如何纠正这个问题?

【问题讨论】:

  • u 表示它是一个 unicode 字符串。 6 年来没有使用 matlab 文件,但我不想像这就是问题所在。是数组字符串还是浮点数中的数据? arr.dtype 是什么?
  • 我同意@Paul,字符串是 unicode 的事实不是问题 --- 你有一个字符串数组的事实是真正的问题。如果在调用save_array(arr, fname) 之前,arr.dtype&lt;U5,那就是问题所在。
  • csv的第一行是名称列表,是字符串。那有什么用吗?

标签: python arrays matlab numpy scipy


【解决方案1】:

我看到您正在读取 CSV 文件并获取字符串数组。 您可以在保存它们之前将它们转换为浮点数数组:

import numpy as np
out_dict[filename]=np.array(arr, dtype=np.float64)

【讨论】:

  • 或者一开始就不要将 CSV 作为列表读取,只需使用arr = np.genfromtxt('data.csv', delimiter=','),它会自动给出适当的 dtype。
  • 这行得通。谢谢你。 @askewchan,我会这样做,但这是为了上课。
  • @askewchan,正确。那将是更有效的方法。但最后你总是可以操作你想要保存到硬盘中的数据,为了节省空间,你可以尝试 np.float32 或 np.int32 或 np.in16 等......当然如果空间是个问题。
  • 现在我的数据显示了很多小数点。我怎样才能截断它们? np.float32?
  • 好吧,你为什么要截断?出于显示目的,您可以编写如下内容: print (len(arr)*'%.2f\t')%tuple(arr)
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2011-11-02
  • 2014-11-28
相关资源
最近更新 更多