如何用单行输入创建2D矩阵

时间:2018-09-09 07:43:56

标签: python python-3.x list numpy matrix

我一直试图用单行输入创建一个矩阵,例如,如果我输入“ 1 2 3”,它应该像l [0] [0] = [1,2,3]

for i in range(num):
  for j in range(num):
    l[i][j] = input().spilt()

它给出索引超出范围的错误,我理解为什么会给出该错误,  由于我们将j索引固定在循环点,这意味着我们将其锁定到一个条目并提供了多个输入,这是矛盾的,为了移除限制器,我像这样修改了它:

for i in range(num):
  l[i] = input().spilt()

我知道这是完全错误的,它离2D矩阵不远了,但是我对此一无所知。

1 个答案:

答案 0 :(得分:0)

根据您的描述,您似乎想要执行以下操作:

l = []
for _ in range(num):
    l.append(input().split())

请注意,split()返回的是字符串(属于输入的一部分),而不是整数。如果要具有数字列表的列表(即floatint),则需要将字符串转换为适当类型的数字:

l = []
for _ in range(num):
    l.append(list(map(float, input().split()))) # float <-> int (if needed)

或者,如果您坚持使用单线:

l = [list(map(float, input().split())) for _ in range(num)]

还要注意,Python没有2D 数组的概念。这是numpy包中的一个概念。您还用numpy标记了问题。因此,如果您的目的是输入2D正方形numpy数组,则可以执行以下操作:

import numpy as np
l = np.array([input('Enter line: ').split() for _ in range(num)], dtype=np.float)

示例:

In [18]: np.array([input('Enter line: ').split() for _ in range(num)], dtype=np.float)
Enter line: 1 2 3
Enter line: 4 5 6
Enter line: 7 8 9
Out[18]: 
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])