【发布时间】:2014-09-10 01:07:34
【问题描述】:
我正在尝试创建一个具有混合数据类型(字符串、整数、整数)的 NumPy 数组/矩阵 (Nx3)。但是当我通过添加一些数据来附加这个矩阵时,我得到一个错误:TypeError: invalid type Promotion。请问,谁能帮我解决这个问题?
当我使用示例数据创建一个数组时,NumPy 将矩阵中的所有列转换为一个“S”数据类型。而且我无法为数组指定数据类型,因为当我这样做时 res = np.array(["TEXT", 1, 1], dtype='S, i4, i4') - 我收到一个错误:TypeError: expected a readable buffer object
templates.py
import numpy as np
from pprint import pprint
test_array = np.zeros((0, 3), dtype='S, i4, i4')
pprint(test_array)
test_array = np.append(test_array, [["TEXT", 1, 1]], axis=0)
pprint(test_array)
print("Array example:")
res = np.array(["TEXT", 1, 1])
pprint(res)
输出:
array([], shape=(0L, 3L),
dtype=[('f0', 'S'), ('f1', '<i4'), ('f2', '<i4')])
Array example:
array(['TEXT', '1', '1'], dtype='|S4')
错误:
Traceback (most recent call last):
File "templates.py", line 5, in <module>
test_array = np.append(test_array, [["TEXT", 1, 1]], axis=0)
File "lib\site-packages\numpy\lib\function_base.py", line 3543, in append
return concatenate((arr, values), axis=axis)
TypeError: invalid type promotion
【问题讨论】:
-
test_array = np.zeros((0,), dtype='S, i4, i4')生成一个包含 0 个“行”和 3 个名为“列”的数组。它确实是一个一维数组。 -
一般在
numpy中通过附加来构建数组并不是一个好主意。最好附加到列表中,并从中构建数组。或者从一个足够大的“空”数组开始,然后插入值。或者连接数组。 -
我刚刚查看了
append代码。它实际上使用concatenate。尝试使用“TEXT”数据创建一个数组,并将其连接到test_array。
标签: python arrays numpy matrix