我想在特定索引处替换numpy数组中的元素。例如
import numpy as np
A = np.array([0,1,2,3,4,5,6])
words = 'dan'
tags = 'np'
A[2] = words+"_"+tags
给我错误:
ValueError:could not convert string to float: 'dan_np
然而,期望的效果应该是:
A =([0,1,'dan_np',3,4,5,6]
我如何实现这一目标?谢谢
答案 0 :(得分:0)
转换为支持混合dtype数据的object
dtype,然后分配 -
A = A.astype(object)
A[2] = words+"_"+tags
示例运行 -
In [253]: A = np.array([0,1,2,3,4,5,6])
In [254]: A.dtype
Out[254]: dtype('int64')
In [255]: A = A.astype(object)
In [256]: A[2] = words+"_"+tags
In [257]: A
Out[257]: array([0, 1, 'dan_np', 3, 4, 5, 6], dtype=object)
答案 1 :(得分:0)
错误消息和注释告诉您不能将字符串放入整数数组中。
您可以将字符串放入列表中:
In [53]: Al = A.tolist()
In [54]: Al[2] = words+"_"+tags
In [55]: Al
Out[55]: [0, 1, 'dan_np', 3, 4, 5, 6]
您可以将该列表重新转换为数组
In [56]: A = np.array(Al)
In [57]: A
Out[57]:
array(['0', '1', 'dan_np', '3', '4', '5', '6'],
dtype='<U11')
由于数字和字符串np.array
的混合使用了它们的通用格式 - 字符串。您也可以指定object
,并获得与@Divakar
相同的结果。
In [58]: A = np.array(Al, dtype=object)
In [59]: A
Out[59]: array([0, 1, 'dan_np', 3, 4, 5, 6], dtype=object)
这样的对象数组类似于列表,包含指向内存中其他元素的指针。
如果A
保持数字,则需要指定兼容的数值。