# 2D array/ matrix
# 5 rows, 5 cols
rows_count = 5
cols_count = 5
# create
# creation looks reverse
# create an array of "cols_count" cols, for each of the "rows_count" rows
# all elements are initialized to 0
two_d_array = [[0 for j in range(cols_count)] for i in range(rows_count)]
# index is from 0 to 4
# for both rows & cols
# since 5 rows, 5 cols
# use
two_d_array[0][0] = 1
print two_d_array[0][0] # prints 1 # 1st row, 1st col (top-left element of matrix)
two_d_array[1][0] = 2
print two_d_array[1][0] # prints 2 # 2nd row, 1st col
two_d_array[1][4] = 3
print two_d_array[1][4] # prints 3 # 2nd row, last col
two_d_array[4][4] = 4
print two_d_array[4][4] # prints 4 # last row, last col (right, bottom element of matrix)
798
如果在开始之前没有大小信息,则创建两个一维列表 .
列表1:存储行列表2:实际二维矩阵
将整行存储在第一个列表中 . 完成后,将列表1附加到列表2中:
from random import randint
coordinates=[]
temp=[]
points=int(raw_input("Enter No Of Coordinates >"))
for i in range(0,points):
randomx=randint(0,1000)
randomy=randint(0,1000)
temp=[]
temp.append(randomx)
temp.append(randomy)
coordinates.append(temp)
print coordinates
输出:
Enter No Of Coordinates >4
[[522, 96], [378, 276], [349, 741], [238, 439]]
import copy
def ndlist(*args, init=0):
dp = init
for x in reversed(args):
dp = [copy.deepcopy(dp) for _ in range(x)]
return dp
l = ndlist(1,2,3,4) # 4 dimensional list initialized with 0's
l[0][1][2][3] = 1
我认为NumPy是要走的路 . 如果您不想使用NumPy,以上是通用的 .
275
您应该列出一个列表,最好的方法是使用嵌套的理解:
>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]
17
这就是我通常在python中创建2D数组的方法 .
col = 3
row = 4
array = [[0] * col for _ in range(row)]
与在列表推导中使用for循环相比,我发现这种语法很容易记住 .
9
使用:
matrix = [[0]*5 for i in range(5)]
第一个维度的* 5起作用,因为在此级别数据是不可变的 .
9
rows = int(input())
cols = int(input())
matrix = []
for i in range(rows):
row = []
for j in range(cols):
row.append(0)
matrix.append(row)
print(matrix)
numpy.matrix('1 2; 3 4') # use Matlab-style syntax
numpy.arange(25).reshape((5, 5)) # create a 1-d range and reshape
numpy.array(range(25)).reshape((5, 5)) # pass a Python range and reshape
numpy.array([5] * 25).reshape((5, 5)) # pass a Python list and reshape
numpy.empty((5, 5)) # allocate, but don't initialize
numpy.ones((5, 5)) # initialize with ones
numpy.ndarray((5, 5)) # use the low-level constructor
23 回答
使用NumPy,您可以像这样初始化空矩阵:
然后追加这样的数据:
如果您希望能够将其视为2D数组,而不是被迫在列表列表中进行思考(在我看来更自然),您可以执行以下操作:
结果是一个列表(不是NumPy数组),你可以用数字,字符串等来覆盖各个位置 .
我正在使用我的第一个Python脚本,我对方阵示例感到有些困惑,所以我希望下面的示例可以帮助您节省一些时间:
以便
请注意这个简短的表达,请参阅@ F.J的答案中的完整解释
这就是字典的制作!
您可以通过两种方式定义 keys 和 values :
要么
结果:
A rewrite for easy reading:
如果在开始之前没有大小信息,则创建两个一维列表 .
列表1:存储行列表2:实际二维矩阵
将整行存储在第一个列表中 . 完成后,将列表1附加到列表2中:
输出:
通过使用列表:
通过使用dict:您还可以将此信息存储在哈希表中以便快速搜索
矩阵['1']会给你O(1)时间的结果
*nb :您需要处理哈希表中的冲突
将比以下更快:
使用:
我认为NumPy是要走的路 . 如果您不想使用NumPy,以上是通用的 .
您应该列出一个列表,最好的方法是使用嵌套的理解:
在您的
[5][5]
示例中,您正在创建一个包含整数"5"的列表,并尝试访问其第5项,这自然会引发IndexError,因为没有第5项:如果要创建空矩阵,则使用正确的语法
如果你想生成一个大小为5的矩阵,填充0,
在Python中,您将创建一个列表列表 . 您不必提前声明尺寸,但可以 . 例如:
现在matrix [0] [0] == 2和matrix [1] [0] == 3.您还可以使用列表推导语法 . 此示例使用它两次来构建“二维列表”:
这就是我通常在python中创建2D数组的方法 .
与在列表推导中使用for循环相比,我发现这种语法很容易记住 .
使用:
第一个维度的* 5起作用,因为在此级别数据是不可变的 .
为什么这么长的代码,你问_496093?
很久以前,当我对Python不熟悉的时候,我看到单行回答编写2D矩阵,并告诉自己我不会再在Python中使用二维矩阵 . (那些单行非常可怕,它没有给我任何有关Python正在做什么的信息 . 另请注意,我不知道这些简写 . )
无论如何,这里是来自C,CPP和Java背景的初学者的代码
Python爱好者和专家的注意事项:请不要因为我写了详细的代码而拒绝投票 .
接受的答案是好的和正确的,但我花了一段时间才明白我也可以用它来创建一个完全空的数组 .
结果是
我用逗号分隔文件读取如下:
列表“data”然后是具有索引数据的列表列表[row] [col]
如果你真的想要一个矩阵,你可能最好使用
numpy
.numpy
中的矩阵运算通常使用具有两个维度的数组类型 . 创建新数组的方法有很多种;其中最有用的是zeros
函数,它接受一个shape参数并返回给定形状的数组,其值初始化为零:numpy
也提供matrix
类型 . 它不太常用,有些人使用它 . 但它对于从Matlab和其他一些环境中来到numpy
的人来说很有用 . 我以为我正在谈论矩阵!以下是创建二维数组和矩阵的一些其他方法(为了紧凑性而删除了输出):
以下是初始化列表列表的简短表示法:
不幸的是,缩短到像
5*[5*[0]]
这样的东西并没有真正起作用,因为你最终得到了同一个列表的5个副本,所以当你修改其中一个时它们都会改变,例如:声明一个零(一)个矩阵:
例如
或numpy.ones((x,y))例如
甚至三维也是可能的 . (http://www.astro.ufl.edu/~warner/prog/python.html参见 - >多维数组)
您在技术上尝试索引未初始化的数组 . 在添加项目之前,您必须首先使用列表初始化外部列表; Python称之为“列表理解” .
您现在可以向列表中添加项目:
虽然您可以按照自己的意愿命名它们,但我这样看是为了避免索引可能产生的混淆,如果对内部和外部列表使用“x”,并且想要非方形矩阵 .
如果你想要的只是一个二维容器来容纳一些元素,你可以方便地使用字典:
然后你可以这样做:
这是有效的,因为
1,2
是一个元组,并且您将它用作索引字典的键 . 结果类似于哑稀疏矩阵 .如osa和Josap Valls所示,您还可以使用
Matrix = collections.defaultdict(lambda:0)
,以便缺少的元素具有默认值0
.Vatsal进一步指出,这种方法对于大型矩阵可能效率不高,而且只能用于代码的非性能关键部分 .