【发布时间】:2018-03-29 05:38:14
【问题描述】:
(警告 - 我是新手)
我使用 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
任何帮助将不胜感激。
【问题讨论】:
-
这个问题类似:stackoverflow.com/questions/31172991/… 但我仍然得到同样的错误。
-
data.dtype对我们来说比type更有用。concatenate无法将字段添加到结构化数组。你需要一些石灰recfunctions.append_field(稍后我会查找详细信息)。 -
谢谢@hpaulj 我已经更新了我的问题。
-
append_fields, stackoverflow.com/q/5288736 -
'O' dtypes 表示字段是对象。检查内容。有时来自 matlab 的加载可能很复杂。它必须翻译外来的东西,比如单元格和结构。