我正在使用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
....
答案 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')