如何将字符串更改为浮点数列表和n维列表的'n'?

时间:2019-05-19 14:38:53

标签: python string list numpy

我有这样的代码,

['11,2019','12,2019']

我尝试使用numpy并希望获得结果

array([[[11],[2019]],[[12],[2019]]])

我尝试用numpy重塑代码,

arr1= arr.reshpae(-1,1), 

但是它只是显示了这个结果

array([['11,2019'],['12,2019']])

不更改类型,将字符串更改为float或int。

在列表步骤中,我尝试在启动numpy步骤之前更改类型。

import numpy as np

arr1=int(arr)

但这显示了我 TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是“列表”

我希望通过将numpy中的每个元素划分为一维列表,将二维列表更改为二维列表。

['11,2019','12,2019']  ->  array([[[11],[2019]],[[12],[2019]]])

4 个答案:

答案 0 :(得分:2)

我为OP考虑了一个相当受好评的解决方案。基本上,您用逗号split str项,mapint,将其附加到list,然后将其转换为{{ 1}}数组。

numpy

答案 1 :(得分:0)

您可以仅遍历初始列表的元素并在每个元素上使用split函数,以便将它们转换为1d列表并将其添加到输出2d列表中:

import numpy as np

arr1d = ['11,2019','12,2019']
arr2d = [] #create an output list
for el in arr1d:
    #for each element in the 1d list
    #split that element into a 1d array and add to the 2d array
    arr2d.append(el.split(','))
#convert into a numpy array if that's necessary
output = np.array(arr2d)

答案 2 :(得分:0)

尝试一下。

a=['11,2019','12,2019']
d=np.array(list((map(lambda y:[[int(y.split(',')[0])],[int(y.split(',')[1])]],a))))
print(d)

输出:

[[[  11]
  [2019]]

 [[  12]
  [2019]]]

答案 3 :(得分:0)

这里有三个选项(假设您的意思是2D数组)。

inp = ['11,2019','12,2019']
1.最短,但是一旦从matrix中删除了numpy类,最终将停止工作:
np.array(np.matrix(';'.join(inp)))
# array([[  11, 2019],
#        [  12, 2019]])

2。这是您应该使用的:

np.array([l.split(',') for l in inp], int)
# array([[  11, 2019],
#        [  12, 2019]])

我们使用列表推导在逗号处分割每个字符串。 np.array的第二个参数是dtype;我们用它来告诉numpy,输入元素(字符串)应解释为整数。

3.这让python将字符串解析为int元组。工程,但有点工程。
import ast
np.array([ast.literal_eval(l) for l in inp])
# array([[  11, 2019],
#        [  12, 2019]])

PS:如果您确实想要输入的内容,则必须在上面附加[..., None],例如:

np.array([l.split(',') for l in inp], int)[..., None]
# array([[[  11],
#         [2019]],
# 
#        [[  12],
#         [2019]]])