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

Python 从用户输入获取numpy 2D数组,python,numpy,user-input,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

我正在尝试从用户输入中获取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数组


提前感谢。

以下互动会话在我的情况下运行良好:

>>> 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]]
>>>类型(A)
>>>进口numpy
>>>numpy.数组(A)
数组([[1,2],
[3, 4]])
>>> 
您是否输入以引号括起来的数据,即:

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

因为这是我能想到的代码失败的唯一原因。输入不会返回字符串,除非用户在中键入一个字符串;在您的情况下,它相当于
eval(raw\u input())

以下交互式会话在我的情况下运行良好:

>>> 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]]
>>>类型(A)
>>>进口numpy
>>>numpy.数组(A)
数组([[1,2],
[3, 4]])
>>> 
您是否输入以引号括起来的数据,即:

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

因为这是我能想到的代码失败的唯一原因。输入不会返回字符串,除非用户在中键入一个字符串;在您的情况下,它相当于
eval(raw\u input())

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

>>> import numpy as N
>>> A = input()
((1,2),(3,4))
>>> type(A[0][0])
<type 'int'>
>>将numpy作为N导入
>>>A=输入()
((1,2),(3,4))
>>>类型(A[0][0])

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

>>> import numpy as N
>>> A = input()
((1,2),(3,4))
>>> type(A[0][0])
<type 'int'>
>>将numpy作为N导入
>>>A=输入()
((1,2),(3,4))
>>>类型(A[0][0])

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


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

Brett Lempereur
Sidharth 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)
Brett Lempereur
Sidharth 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)

或者简单地说,您可以这样做:

import numpy

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

或者简单地说,您可以这样做:

import numpy

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

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

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

您必须手动迭代字符串并以元组形式获取数字以创建数组。您必须手动迭代字符串并以元组形式获取数字以创建数组。“输入不会返回字符串,除非用户在中键入一个”:在Python 3中为非真。感谢您让我知道,我已经很久没有使用任何与
input()
相关的东西了。“除非用户在中键入字符串,否则input不会返回字符串”:在Python 3中不正确。感谢您让我知道,我已经很久没有使用任何与
input()
相关的东西了。这可能是一个很好的答案,但没有解释您是如何得到它的,这也许是一个很好的答案,但如果不解释你是如何做到这一点的,它可能对其他人没有用处