我想用混合数据类型创建一个numpy ndarray。但是我在追加另一行时遇到问题。 我的目标是初始化k,并在以后继续向其添加行。
import numpy as np
k = np.ndarray((0,3), dtype=[('name', str), ('age', int), ('height', float)])
print(f'k datatype: {k.dtype}')
# k datatype: [('name', '<U'), ('age', '<i4'), ('height', '<f8')]
np.append(k, ['matt', 40, 180.5])
# TypeError: invalid type promotion
如果我在创建k时未指定音素,则没有错误,但是ndarray中的列都具有相同的数据类型(字符串)。
感谢您的帮助。谢谢
答案 0 :(得分:0)
您的代码有两点错误。首先,您应该为要成为可变长度字符串的字段指定object
dtype。
第二个问题是,numpy
根据其概念起源对lists
和tuples
进行不同的对待。在添加之前,需要将要添加的对象转换为等效的结构。
这将起作用:
import numpy as np
k = np.ndarray((0,3), dtype=[('name', object), ('age', int), ('height', float)])
np.append(k, np.array(('matt', 40, 180.5), dtype=k.dtype))
输出:
array([('matt', 40, 180.5)],
dtype=[('name', 'O'), ('age', '<i4'), ('height', '<f8')])