脾气暴躁的人只接受字符串的第一个字符

时间:2019-03-27 12:27:46

标签: python numpy

以下是我的问题的简化版本。我想创建一个(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')

2 个答案:

答案 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字符串