首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >numpy.void与numpy.ndarray的连接

numpy.void与numpy.ndarray的连接
EN

Stack Overflow用户
提问于 2017-10-17 13:42:31
回答 1查看 889关注 0票数 0

(警告-我是新手)

我使用scipy.io导入mat文件:

代码语言:javascript
复制
   data = spio.loadmat('data.mat', struct_as_record=True, squeeze_me=True)
   data = data['b']
   >>> <type 'numpy.void'>

这给了我一个numpy.void类型的文件。每一行有17个条目,它们是string、float、array类型。

代码语言:javascript
复制
print(data.shape)
>>> (11000,)

我有另一个字符串列表,我将其转换为一个numpy.array:

代码语言:javascript
复制
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

我想把这些内容连成一列:

代码语言:javascript
复制
NEW = np.concatenate((data, filenames), axis=1)

但是我发现了一个错误:

代码语言:javascript
复制
>>> TypeError: invalid type promotion

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-17 17:52:21

recfunctions是一个模块,它提供了用于修改结构化数组(及其变体,recarray)的工具。它需要单独的进口。根据我的经验,这也是一种小问题。

代码语言:javascript
复制
In [158]: from numpy.lib import recfunctions

创建一个具有多个对象dtype字段的数组:

代码语言:javascript
复制
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-错误之后,这样做是可行的:

代码语言:javascript
复制
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数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46791664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档