2014-10-06 3 views
0

Я пытаюсь получить двумерный массив из числа пользователей, за исключением того, что он не работает должным образом, поскольку input() возвращает тип 'str', в то время как метод numpy array() ожидает кортеж :Получите многомерный 2D-массив от пользовательского ввода

import numpy as N 

def main(): 
    A = input()  # the user is expected to enter a 2D array like [[1,2],[3,4]] for example 
    A = N.array(A) # since A is a 'str' A 
    print(A.shape) # output is '()' instead of '(2, 2)' showing the previous instruction didn't work as expected 

if __name__ == "__main__": 
main() 

так что мой вопрос будет: Как я могу превратить входную строку в кортеж, так что метод массив() правильно превращает вход в Numpy 2D массив?

Заранее спасибо.

+0

Вам придется вручную перебирать строки и получить номера в форме кортежа для создания массива. –

ответ

2

Следующая интерактивная сессия работала нормально в моем случае:

>>> A = input() 
[[1, 2], [3, 4]] 
>>> 
>>> A 
[[1, 2], [3, 4]] 
>>> type(A) 
<type 'list'> 
>>> import numpy 
>>> numpy.array(A) 
array([[1, 2], 
     [3, 4]]) 
>>> 

А вы вводить данные, завернутые в кавычки, то есть:

>>> A = input() 
"[[1, 2], [3, 4]]" 
>>> A 
'[[1, 2], [3, 4]]' 
>>> type(A) 
<type 'str'> 

Как это единственная причина, я могу думать для вашего код не работает. Ввод не возвращает строку, если пользователь не вводит ее; это эквивалентно eval(raw_input()) в вашем случае.

+3

«Ввод не возвращает строку, если пользователь не набирает один из них:« Не верно в Python 3. – DSM

+0

Спасибо, что сообщили мне, что я давно не использовал что-либо «input()». –

2

Я думаю, что код правильный, вам нужно изменить способ ввода данных. Пожалуйста, посмотрите на следующий фрагмент кода

>>> import numpy as N 
>>> A = input() 
((1,2),(3,4)) 
>>> type(A[0][0]) 
<type 'int'> 
-1

, чтобы получить целый вход, вы должны пройти вход() внутри Int() как ...

A=int(input()) 
type(A) 
>>>int 
Смежные вопросы