从用户输入获取numpy 2D数组

时间:2014-10-06 15:23:30

标签: python numpy user-input

我正在尝试从用户输入获取一个numpy二维数组,除非它无法正常工作,因为input()返回一个' str'类型,而numpy array()方法需要一个元组:

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()

所以我的问题是:如何将输入字符串转换为元组,以便array()方法正确地将输入转换为numpy 2D数组?

提前致谢。

7 个答案:

答案 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())

答案 1 :(得分:2)

我认为代码是正确的,您需要更改输入数据的方式。请查看以下代码段

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

答案 2 :(得分:2)

  

Brett LempereurSidharth Shah的答案仅适用于Python2,因为Python3中的input()默认会返回str

在Python3中,您还需要使用ast来评估要列出的字符串输入。

>>> import ast
>>> import numpy as np
>>> matrixStr = input()
[[1, 2], [3, 4]]
>>> type(matrixStr)
str
>>> matrixList = ast.literal_eval(matrixStr)
>>> type(matrixList)
list
>>> matrix = np.array(matrix)

答案 3 :(得分:0)

或者只是您可以这样做:

import numpy

def array_input():
    a = eval(input('Enter list: '))
    b = numpy.array(a)
return b
print(array_input())

答案 4 :(得分:0)

import numpy as np
arr = np.array([[int(x) for x in input(f"Enter the value{[i]}:").split()] for i in range(3)])

print(arr)

答案 5 :(得分:0)

大量2D数组用户定义的输入

import numpy as np
lis = []
for i in range(3):
    for j in [input(f"Enter the value{[i]}:").split()]:
        lis.append(j)
        arr = np.array(lis,dtype=int)
print(arr)

答案 6 :(得分:-1)

要获取整数输入,您必须在int()中传递input() 像...

A=int(input())
type(A)
>>>int