Как я могу изменить строку в список с плавающей запятой и 'n' из списка n измерений? - PullRequest
1 голос
/ 19 мая 2019

У меня есть код, подобный этому списку,

['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 ]

2 голосов
/ 19 мая 2019

Я сделал довольно комментируемое решение для OP, чтобы рассмотреть. По сути, вы split str элементы запятыми, map это к int, добавляете его к list, а затем конвертируете в массив 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 )
0 голосов
/ 19 мая 2019

Вот три варианта (при условии, что вы действительно имеете в виду 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 анализировать строки в кортежи целых чисел.Работает, но немного перегружен.
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]]])
0 голосов
/ 19 мая 2019

Попробуйте это.

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]]]
0 голосов
/ 19 мая 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...