我正在尝试从用户输入获取一个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数组?
提前致谢。
答案 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 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)
答案 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