(警告-我是新手)
我使用scipy.io导入mat文件:
data = spio.loadmat('data.mat', struct_as_record=True, squeeze_me=True)
data = data['b']
>>> <type 'numpy.void'>
这给了我一个numpy.void类型的文件。每一行有17个条目,它们是string、float、array类型。
print(data.shape)
>>> (11000,)
我有另一个字符串列表,我将其转换为一个numpy.array:
filenames = np.array([filenames])
filenames = np.ndarray.flatten(filenames)
print (filenames.shape)
>>> (11000,)
print(data.dtype)
print(filenames.dtype)
>>> [('fieldname1', 'O'), ('fieldname2', 'O'), ('fieldname3', 'O'), ('fieldname4', 'O'), ('fieldname5', 'O'), ('fieldname6', 'O'), ('fieldname7', 'O'), ('fieldname8', 'O'), ('fieldname9', 'O'), ('fieldname10', 'O'), ('fieldname11', 'O'), ('fieldname12', 'O'), ('fieldname13', 'O'), ('fieldname14', 'O'), ('fieldname15', 'O'), ('fieldname16', 'O'), ('fieldname17', 'O')]
>>> |S16
我想把这些内容连成一列:
NEW = np.concatenate((data, filenames), axis=1)
但是我发现了一个错误:
>>> TypeError: invalid type promotion
任何帮助都将不胜感激。
发布于 2017-10-17 17:52:21
recfunctions
是一个模块,它提供了用于修改结构化数组(及其变体,recarray
)的工具。它需要单独的进口。根据我的经验,这也是一种小问题。
In [158]: from numpy.lib import recfunctions
创建一个具有多个对象dtype字段的数组:
In [159]: dat = np.empty((3,),dtype=('O,O,O'))
In [160]: dat
Out[160]:
array([(None, None, None), (None, None, None), (None, None, None)],
dtype=[('f0', 'O'), ('f1', 'O'), ('f2', 'O')])
在调用append_field
时进行了一些尝试-n-错误之后,这样做是可行的:
In [161]: names = np.array(['one','two','three'])
In [162]: dat1 = recfunctions.append_fields(dat, 'names', names, usemask=False)
In [163]: dat1
Out[163]:
array([(None, None, None, 'one'), (None, None, None, 'two'),
(None, None, None, 'three')],
dtype=[('f0', 'O'), ('f1', 'O'), ('f2', 'O'), ('names', '<U5')])
但是检查从MATLAB加载的数据的内容。.mat可能包含结构和单元格,loadmat
必须将它们转换为numpy
等效的结构和单元格。为此,它广泛使用了对象dtype数组。
https://stackoverflow.com/questions/46791664
复制相似问题