【问题标题】:Get numpy 2D array from user input从用户输入中获取 numpy 二维数组
【发布时间】:2014-10-06 15:23:30
【问题描述】:

我试图从用户输入中获取一个 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 二维数组?

提前致谢。

【问题讨论】:

  • 您必须手动遍历字符串并以元组形式获取数字以创建数组。

标签: python numpy user-input


【解决方案1】:

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

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

【讨论】:

  • “除非用户输入一个,否则输入不会返回字符串”:在 Python 3 中不正确。
  • 感谢您告诉我,我已经很久没有使用任何与input() 相关的东西了。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    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)
    

    【讨论】:

      【解决方案4】:

      或者你可以这样做:

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

      【讨论】:

        【解决方案5】:
        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)
        

        【讨论】:

          【解决方案6】:

          Numpy 二维数组用户定义输入

          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)
          

          【讨论】:

          • 这可能是一个很好的答案,但如果没有解释你是如何得出它的,它可能只是对其他人没有用处
          【解决方案7】:

          要获得整数输入,您必须在 int() 中传递 input() 喜欢...

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-25
            • 2021-12-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多