为什么MATLAB 2D Char数组变成Python 1D数组?

时间:2018-06-27 23:04:32

标签: python arrays matlab

我正在使用Scipy将MATLAB 2D矩阵加载到Python中。在MATLAB中,MAT是32x40 Char矩阵。每个索引中都有一个字符。但是,当加载到Python中时,它将变成(32,) numpy array,现在所有字符都被视为32行字符串,而不是32行字符,最大长度为40个字符。我该如何将这个32行数组重新分解为具有32行40列字符的2D数组?

a = np.array([])
matdata = spio.loadmat(misspath)
a = np.append(a, matdata['D_package'])
a_data = matdata['a_data']

Python numpy (32,)

Out[545]: 
array([['PLPBTKNLYLHDFWVCEVTTNMTTBFFVAGLDEGHFFFTP'],
['PRiDAEo    rooWEnaFFDAKAuSOrRERltrAFFCCeo'],
['FltRGFUrAGFtwSxxLLLLLrIAossDGDPAAAAsw'],
[' FKDDFWa plG iiFDGGSSD\x00\x02u3t te\x003411te'],
.....

原始MATLAB (32,40)

val = 
PLPBTKNLYLHDFWVCEVTTNMTTBFFVAGLDEGHFFFTP
PRiDAEo    rooWEnaFFDAKAuSOrRERltrAFFCCeo
FltRGFUrAGFtwSxxLLLLLrIAossDGDPAAAAsw
 FKDDFWa plG iiFDGGSSD\x00\x02u3t te\x003411te
....

1 个答案:

答案 0 :(得分:0)

直到R2016b,MATLAB都没有 string 数据类型,但是将字符串存储为 character vectors ,这就是大多数MATLAB代码仍然编写的方式。因此loadmat合理地假设应将MATLAB中的 n 维字符数组解释为 n-1 维字符串数组。

如果您实际上希望在Python中使用一个数组,其中每个元素都是一个字符,那么使用列表推导很容易进行转换:

>>> a = numpy.array([ ['hot'],['foo'],['pie'] ])

array([['hot'],
       ['foo'],
       ['pie']],
      dtype='<U3')

>>> numpy.array([[c for c in w[0]] for w in a])

array([['h', 'o', 't'],
   ['f', 'o', 'o'],
   ['p', 'i', 'e']],
  dtype='<U1')