我使用了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)
答案 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]])