python中用户输入的多维数组

时间:2019-02-12 15:56:00

标签: python numpy multidimensional-array

我使用了Jupyter笔记本,我是Python的新手,我试图从多维数组中获取用户的值我该怎么做?我写了一些代码,将第一个值放在第一位后得到了我不理解的错误

错误:

Traceback (most recent call last)
   <ipython-input-64-4d8986a5e412> in <module>
          5 for i in range(lengthrow):
          6     for j in range(lengthcol):
    ----> 7         arr[i][j]=int(input("enter value"))
          8 print(arr)
     

IndexError:索引0超出了大小为0的轴0的边界

代码:

from numpy import*
arr = array([[],[]])
lengthrow=int(input("enter array row length"))
lengthcol=int(input("enter array col length"))
for i in range(lengthrow):
    for j in range(lengthcol):
        arr[i][j]=int(input("enter value"))
print(arr)

3 个答案:

答案 0 :(得分:1)

您可以在此处使用列表理解,因为最终结果是列表列表:

lengthrow = int(input("enter array row length: "))
lengthcol = int(input("enter array col length: "))

arr = [[int(input("enter value: ")) for _ in range(lengthcol)] for _ in range(lengthrow)]

print(arr)

问题您的代码:

arr = array([[],[]])
print(arr.shape)
# (2, 0)

这意味着数组中的列大小为0,因此,例如,当您执行arr[0][0]时,它将引发错误。

答案 1 :(得分:1)

我对@Austin做出了很好的回答,并做了一些小改动:

import numpy as np

n_rows = int(input("Enter number of rows: "))
n_cols = int(input("Enter number of columns: "))

arr = [[int(input("Enter value for {}. row and {}. column: ".format(r + 1, c + 1))) for c in range(n_cols)] for r in range(n_rows)]

print(np.array(arr))

输出为:

Enter number of rows: 2
Enter number of columns: 3
Enter value for 1. row and 1. column: 1
Enter value for 1. row and 2. column: 2
Enter value for 1. row and 3. column: 3
Enter value for 2. row and 1. column: 4
Enter value for 2. row and 2. column: 5
Enter value for 2. row and 3. column: 6
[[1 2 3]
 [4 5 6]]

您遇到了一个异常,因为您初始化了一个空数组并使用了无效的索引。使用此答案,您可以在输入用户输入后生成阵列。


这里是单线版(arr = [[...)的长版本,可为您提供相同的结果:

outer_arr = []
for r in range(n_rows):
    inner_arr = []
    for c in range(n_cols):
        num = int(input("Enter value for {}. row and {}. column: ".format(r + 1, c + 1)))
        inner_arr.append(num)
    outer_arr.append(inner_arr)

print(np.array(outer_arr))

答案 2 :(得分:0)

问题在于初始数组的形状:

In [1]: arr = np.array([[], []])
In [2]: arr
Out[2]: array([], shape=(2, 0), dtype=float64)
In [3]: arr[0]
Out[3]: array([], dtype=float64)
In [4]: arr[0][0]
... 
IndexError: index 0 is out of bounds for axis 0 with size 0

将此数组视为2行0列。您不能引用不存在的列。而且,与其他一些语言相比,您不能仅通过引用新索引来增加数组。创建后,大小将固定。

虽然其他人展示了不错的列表理解方法,但我将展示如何正确使用您的方法:

In [8]: lengthrow, lengthcol = 2,3    # or user input
In [9]: arr = np.zeros((lengthrow, lengthcol), dtype=int)  # large enough array
In [10]: arr
Out[10]: 
array([[0, 0, 0],
       [0, 0, 0]])
In [11]: for i in range(2):
    ...:     for j in range(3):
    ...:         arr[i,j] = int(input(f'{i},{j}:'))
    ...:         
0,0:0
0,1:1
0,2:2
1,0:3
1,1:4
1,2:5
In [12]: arr
Out[12]: 
array([[0, 1, 2],
       [3, 4, 5]])