我想创建一个混合数据类型(字符串,整数,整数)的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
当我使用示例数据创建一个数组时,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个命名为“列”的数组。实际上,它是一个一维数组。 - hpauljnumpy
中,通过追加构建数组并不是一个好主意。更好的方法是将元素追加到列表中,然后从列表构建数组。或者从足够大的“空”数组开始,并插入值。或者连接数组。 - hpauljappend
代码。它实际上使用了concatenate
。尝试创建一个带有“TEXT”数据的数组,并将其连接到test_array
。 - hpaulj