如何在Python中定义⼆维数组我想定义⼀个没有初始化长度的⼆维数组,如下所⽰:
= [][]
但这不起作⽤...
我已经尝试过下⾯的代码,但是它也是错误的:
Matrix = [5][5]
错误:
Traceback ...
IndexError: list index out of range
我怎么了
#1楼
我读了这样的逗号分隔⽂件:
data=[]
for l in infile:
l = split(',')
data.append(l)
然后,列表“数据”是带有索引数据的列表的列表[⾏] [列]
#2楼
声明零(⼀)矩阵:
例如
>>> s((3, 5))
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
或s((x,y))例如
>>> np.ones((3, 5))
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
甚⾄三个尺⼨都是可能的。 ( 参见->多维数组)
#3楼
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5
请注意此简短表达,请参见@FJ答案中的完整解释
#4楼
我正在使⽤我的第⼀个Python脚本,我对⽅矩阵⽰例有些困惑,因此希望以下⽰例可以帮助您节省⼀些时间:
# Creates a 2 x 5 matrix
Matrix = [[0 for y in xrange(5)] for x in xrange(2)]
以便
Matrix[1][4] = 2 # Valid
Matrix[4][1] = 3 # IndexError: list index out of range
#5楼
如果只需要⼀个⼆维容器来容纳某些元素,则可以⽅便地使⽤字典:
Matrix = {}
然后,您可以执⾏以下操作:
Matrix[1,2] = 15
print Matrix[1,2]
这是可⾏的,因为1,2是⼀个元组,并且您将其⽤作索引字典的键。 结果类似于哑的稀疏矩阵。
如osa和Josap Valls所指出的,您也可以使⽤Matrix = collections.defaultdict(lambda:0)以便丢失的元素的默认值为0 。Vatsal进⼀步指出,该⽅法对于⼤型矩阵可能不是很有效,并且仅应在代码的⾮关键性能部分使⽤。
#6楼
采⽤:
matrix = [[0]*5 for i in range(5)]
第⼀维的* 5起作⽤是因为在此级别上,数据是不可变的。
#7楼
采⽤:
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,则以上是⼀种通⽤⽅法。
#8楼
可接受的答案是正确且正确的,但是花了我⼀段时间才了解到我也可以使⽤它来创建⼀个完全空的数组。l = [[] for _ in range(3)]
结果是
[[], [], []]
#9楼
重写以便于阅读:
# 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)
#10楼
如果您希望能够将其视为2D数组,⽽不是被迫以列表列表的⽅式思考(我认为这⾃然得多),则可以执⾏以下操作:
import numpy
Nx=3; Ny=4
my2Dlist= s((Nx,Ny)).tolist()
结果是⼀个列表(不是NumPy数组),您可以⽤数字,字符串或其他内容覆盖各个位置。
#11楼
这就是字典的⽤途!
matrix = {}
您可以通过两种⽅式定义键和值 :
matrix[0,0] = value
要么
matrix = { (0,0) : value }
结果:
[ value, value, value, value, value],
[ value, value, value, value, value],
...
#12楼
如果在开始之前没有尺⼨信息,请创建两个⼀维列表。
list 1: To store rows
list 2: Actual two-dimensional matrix
将整个⾏存储在第⼀个列表中。 完成后,将列表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]]
#13楼
使⽤NumPy,您可以像这样初始化空矩阵:
import numpy as np
mm = np.matrix([])
然后像这样追加数据:
mm = np.append(mm, [[1,2]], axis=1)
#14楼
一维数组的定义和初始化通过使⽤列表:
matrix_in_python = [['Roy',80,75,85,90,95],['John',75,80,75,85,100],['Dave',80,80,80,90,95]]通过使⽤dict:您还可以将此信息存储在哈希表中,以进⾏快速搜索,例如
matrix = { '1':[0,0] , '2':[0,1],'3':[0,2],'4' : [1,0],'5':[1,1],'6':[1,2],'7':[2,0],'8':[2,1],'9':[2,2]}; matrix ['1']将为您提供O(1)时间的结果
* nb :您需要处理哈希表中的冲突
#15楼
这就是我通常在python中创建2D数组的⽅式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论