以下是我的问题的简化版本。我想创建一个(N, 1)
形状的numpy数组,该数组将字符串作为它们的值。但是,当我尝试插入字符串时,仅插入字符串的第一个字符。
我在这里做什么错了?
>>> import numpy as np
>>> N = 23000
>>> Y = np.empty((N, 1), dtype=str)
>>> Y.shape
(23000, 1)
>>> for i in range(N):
... Y[i] = "random string"
...
>>> Y[10]
array(['r'], dtype='<U1')
答案 0 :(得分:3)
默认情况下,数据类型str
的长度为1
。因此,您只会得到一个字符。我们可以使用np.dtype('U100')
设置最大数据长度。 Un
,其中U
是unicode,n
是其中的字符数。
尝试下面的代码
>>> import numpy as np
>>> N = 23000
>>> Y = np.empty((N, 1), dtype=np.dtype('U100'))
>>> Y.shape
(23000, 1)
>>> for i in range(N):
... Y[i] = "random string"
...
>>> Y[10]
array(['random string'], dtype='<U100')
答案 1 :(得分:2)
即使您在dtype=str
中指定了np.empty
,当您选中Y时,它也不是字符串类型。
import numpy as np
N = 23000
Y = np.empty((N, 1), dtype=str)
Y
输出:
array([[''],
[''],
[''],
...,
[''],
[''],
['']], dtype='<U1')
dtype为“ U1”。
这意味着,它是一个长度为1的unicode字符串。
您可以将其更改为
Y = np.empty((N, 1), dtype='U25')
Y[10]
的输出:
array(['random string'], dtype='<U25')
我给“ U25”赋了一个随机值25。您可以在那里输入任何数字。 25在这里。
U25中的25表示长度为25的Unicode字符串