【问题标题】:numpy append, typeError: invalid type promotionnumpy append,typeError:无效的类型提升
【发布时间】:2019-03-31 02:58:58
【问题描述】:

我想创建一个混合数据类型的 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的时候没有指定dypte,那么不会报错,但是ndarray中的列都具有相同的数据类型(字符串)。

感谢任何帮助。谢谢

【问题讨论】:

  • dtype 必须匹配。
  • 他们会,不是吗? 'matt' 是一个字符串,40 是一个 it,180.5 是一个浮点数。
  • 没有。 np.append 将列表转换为数组,然后将其提供给 concatenate. Look at np.array(['matt', 40, 180.5])`。它的 dtype 不匹配。使用复合数据类型,您必须指定数据类型。
  • 您以 (0,3) 数组开头的事实表明您打算重复执行此操作append。不。收集列表中的值,并创建一次数组。并确保它是一个元组列表。练习使用这个 dtype 来创建一个不迭代的数组。

标签: python numpy multidimensional-array numpy-ndarray


【解决方案1】:

您的代码有两个问题。第一个是您应该为您打算成为可变长度字符串的字段指定object dtype。

第二个是numpy 对待liststuples 的方式不同,这与它们的概念起源一致。您需要在追加之前将要追加的对象转换为等效结构。

这将起作用:

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')])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2021-04-11
    • 2020-05-19
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多