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

2024-04-26 00:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Scipy将matlab2d矩阵加载到Python中。在MATLAB中,MAT是32x40字符矩阵。每个索引中都有一个字符。但是,当加载到Python中时,它变成了(32,)numpyarray,所有字符现在都被视为32行字符串,而不是32行最大长度为40个字符的字符。如何将这个32行数组分解回一个包含32行40列字符的二维数组?你知道吗

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
....

Tags: datanp矩阵数组字符arraymatlabplg
1条回答
网友
1楼 · 发布于 2024-04-26 00:26:02

在R2016b之前,MATLAB没有字符串数据类型,而是将字符串存储为字符向量,这就是大多数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')

相关问题 更多 >