如何在numpy中将字符串值赋给数组?
当我试着像这样把一个字符串赋值给一个数组时:
CoverageACol[0,0] = "Hello"
我收到了以下错误信息:
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
CoverageACol[0,0] = "hello"
ValueError: setting an array element with a sequence.
不过,把一个整数赋值就没有问题:
CoverageACol[0,0] = 42
CoverageACol 是一个 numpy 数组。
请帮帮我!谢谢!
2 个回答
7
你需要设置一下这个数据类型,也就是数组的类型:
CoverageACol = numpy.array([["a","b"],["c","d"]],dtype=numpy.dtype('a16'))
这样做会把ConerageACol变成一个长度为16的字符串数组(a)。
23
你会遇到这个错误是因为NumPy的数组是同质的,这意味着它是一个多维的元素表,所有元素都是同一种类型。这和普通Python中的多维列表不同,在普通Python中,你可以在一个列表里放不同类型的对象。
普通Python:
>>> CoverageACol = [[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]
>>> CoverageACol[0][0] = "hello"
>>> CoverageACol
[['hello', 1, 2, 3, 4],
[5, 6, 7, 8, 9]]
NumPy:
>>> from numpy import *
>>> CoverageACol = arange(10).reshape(2,5)
>>> CoverageACol
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> CoverageACol[0,0] = "Hello"
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/biogeek/<ipython console> in <module>()
ValueError: setting an array element with a sequence.
所以,这取决于你想要实现什么,为什么你想在一个主要是数字的数组里存储一个字符串?如果这真的是你想要的,你可以把NumPy数组的数据类型设置为字符串:
>>> CoverageACol = array(range(10), dtype=str).reshape(2,5)
>>> CoverageACol
array([['0', '1', '2', '3', '4'],
['5', '6', '7', '8', '9']],
dtype='|S1')
>>> CoverageACol[0,0] = "Hello"
>>> CoverageACol
array([['H', '1', '2', '3', '4'],
['5', '6', '7', '8', '9']],
dtype='|S1')
注意,只有Hello
的第一个字母被赋值。如果你想要整个单词被赋值,你需要设置一个数组协议类型的字符串:
>>> CoverageACol = array(range(10), dtype='a5').reshape(2,5)
>>> CoverageACol:
array([['0', '1', '2', '3', '4'],
['5', '6', '7', '8', '9']],
dtype='|S5')
>>> CoverageACol[0,0] = "Hello"
>>> CoverageACol
array([['Hello', '1', '2', '3', '4'],
['5', '6', '7', '8', '9']],
dtype='|S5')