Python 如何将字符串更改为浮点列表和';n';n维列表的定义?
我有一个类似于这个列表的代码Python 如何将字符串更改为浮点列表和';n';n维列表的定义?,python,string,list,numpy,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 a
['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]]])
您可以迭代初始列表中的元素,并对每个元素使用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)
我给OP做了一个相当重要的注释解决方案。基本上,您可以用逗号拆分
str
项,将其映射到int
,将其附加到列表
,然后将其转换为numpy
数组
input_list = [ '11,2019', '12,2019' ]
# initialize variable for storing the result
output_list = []
# loop through every item in the input list
for item in input_list:
# split each item of list by comma
split_str = item.split( ',' )
# convert split list of strings to int
split_int = list( map( int, split_item ) )
# store result to variable
output_list.append( split_int )
# convert list to numpy (optional)
output_array = numpy.array( output_list )
试试这个
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]]]
这里有三个选项(假设您真正指的是2D阵列)
1.最短,但一旦从numpy
中删除matrix
类,最终将停止工作:
np.array(np.matrix(';'.join(inp)))
# array([[ 11, 2019],
# [ 12, 2019]])
2.这是您应该使用的:
我们使用列表理解在逗号处拆分每个字符串。np.array
的第二个参数是dtype
;我们使用它来告诉numpy输入元素(字符串)应该被解释为int
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]]])
int
是一个用于创建一个整数的python函数。。您需要在逗号上拆分这些字符串。您遗漏了几个:)np.genfromtxt(inp,delimiter=',',dtype=int)
np.stack(np.char.split(inp,,).astype(int)
@hpaulj-Ouch!第二个很讨厌!但是为什么不发布第一个呢?事实上,我认为这是一种“正确”的方式。很好,对noob很友好。但是考虑删除不必要复杂的int转换。让numpy做起来容易多了:np.array(output\u list,dtype=int)
将在可能的情况下转换为int。
import ast
np.array([ast.literal_eval(l) for l in inp])
# array([[ 11, 2019],
# [ 12, 2019]])
np.array([l.split(',') for l in inp], int)[..., None]
# array([[[ 11],
# [2019]],
#
# [[ 12],
# [2019]]])