天天看點

python中怎麼定義二維數組_如何在Python中定義二維數組

回答(23)

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

我正在使用我的第一個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

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

# Creates a list containing 5 lists initialized to 0

Matrix = [[0]*5]*5

請注意這個簡短的表達,請參閱@ F.J的答案中的完整解釋

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

使用NumPy,您可以像這樣初始化空矩陣:

import numpy as np

mm = np.matrix([])

然後追加這樣的資料:

mm = np.append(mm, [[1,2]], axis=1)

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

這就是字典的制作!

matrix = {}

您可以通過兩種方式定義 keys 和 values :

matrix[0,0] = value

要麼

matrix = { (0,0) : value }

結果:

[ value, value, value, value, value],

[ value, value, value, value, value],

...

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

A rewrite for easy reading:

# 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)

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

如果在開始之前沒有大小資訊,則建立兩個一維清單 .

清單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]]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

通過使用清單:

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]};

矩陣['1']會給你O(1)時間的結果

*nb :您需要處理哈希表中的沖突

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

l=[[0]*(L) for i in range(W)]

将比以下更快:

l = [[0 for x in range(L)] for y in range(W)]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

使用:

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,以上是通用的 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

您應該列出一個清單,最好的方法是使用嵌套的了解:

>>> 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]]

在您的 [5][5] 示例中,您正在建立一個包含整數"5"的清單,并嘗試通路其第5項,這自然會引發IndexError,因為沒有第5項:

>>> l = [5]

>>> l[5]

Traceback (most recent call last):

File "", line 1, in

IndexError: list index out of range

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

如果要建立空矩陣,則使用正确的文法

matrix = [[]]

如果你想生成一個大小為5的矩陣,填充0,

matrix = [[0 for i in xrange(5)] for i in xrange(5)]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

在Python中,您将建立一個清單清單 . 您不必提前聲明尺寸,但可以 . 例如:

matrix = []

matrix.append([])

matrix.append([])

matrix[0].append(2)

matrix[1].append(3)

現在matrix [0] [0] == 2和matrix [1] [0] == 3.您還可以使用清單推導文法 . 此示例使用它兩次來建構“二維清單”:

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)]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

這就是我通常在python中建立2D數組的方法 .

col = 3

row = 4

array = [[0] * col for _ in range(row)]

與在清單推導中使用for循環相比,我發現這種文法很容易記住 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

使用:

matrix = [[0]*5 for i in range(5)]

第一個次元的* 5起作用,因為在此級别資料是不可變的 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

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)

為什麼這麼長的代碼,你問_496093?

很久以前,當我對Python不熟悉的時候,我看到單行回答編寫2D矩陣,并告訴自己我不會再在Python中使用二維矩陣 . (那些單行非常可怕,它沒有給我任何有關Python正在做什麼的資訊 . 另請注意,我不知道這些簡寫 . )

無論如何,這裡是來自C,CPP和Java背景的初學者的代碼

Python愛好者和專家的注意事項:請不要因為我寫了詳細的代碼而拒絕投票 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

接受的答案是好的和正确的,但我花了一段時間才明白我也可以用它來建立一個完全空的數組 .

l = [[] for _ in range(3)]

結果是

[[], [], []]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

我用逗号分隔檔案讀取如下:

data=[]

for l in infile:

l = split(',')

data.append(l)

清單“data”然後是具有索引資料的清單清單[row] [col]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

如果您希望能夠将其視為2D數組,而不是被迫在清單清單中進行思考(在我看來更自然),您可以執行以下操作:

import numpy

Nx=3; Ny=4

my2Dlist= numpy.zeros((Nx,Ny)).tolist()

結果是一個清單(不是NumPy數組),你可以用數字,字元串等來覆寫各個位置 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

如果你真的想要一個矩陣,你可能最好使用 numpy . numpy 中的矩陣運算通常使用具有兩個次元的數組類型 . 建立新數組的方法有很多種;其中最有用的是 zeros 函數,它接受一個shape參數并傳回給定形狀的數組,其值初始化為零:

>>> import numpy

>>> numpy.zeros((5, 5))

array([[ 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.]])

numpy 也提供 matrix 類型 . 它不太常用,有些人使用它 . 但它對于從Matlab和其他一些環境中來到 numpy 的人來說很有用 . 我以為我正在談論矩陣!

>>> numpy.matrix([[1, 2], [3, 4]])

matrix([[1, 2],

[3, 4]])

以下是建立二維數組和矩陣的一些其他方法(為了緊湊性而删除了輸出):

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

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

以下是初始化清單清單的簡短表示法:

matrix = [[0]*5 for i in range(5)]

不幸的是,縮短到像 5*[5*[0]] 這樣的東西并沒有真正起作用,因為你最終得到了同一個清單的5個副本,是以當你修改其中一個時它們都會改變,例如:

>>> matrix = 5*[5*[0]]

>>> 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]]

>>> matrix[4][4] = 2

>>> matrix

[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

聲明一個零(一)個矩陣:

numpy.zeros((x, y))

例如

>>> numpy.zeros((3, 5))

array([[ 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0.],

[ 0., 0., 0., 0., 0.]])

或numpy.ones((x,y))例如

>>> np.ones((3, 5))

array([[ 1., 1., 1., 1., 1.],

[ 1., 1., 1., 1., 1.],

[ 1., 1., 1., 1., 1.]])

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

您在技術上嘗試索引未初始化的數組 . 在添加項目之前,您必須首先使用清單初始化外部清單; Python稱之為“清單了解” .

# Creates a list containing 5 lists, each of 8 items, all set to 0

w, h = 8, 5;

Matrix = [[0 for x in range(w)] for y in range(h)]

您現在可以向清單中添加項目:

Matrix[0][0] = 1

Matrix[6][0] = 3 # error! range...

Matrix[0][6] = 3 # valid

print Matrix[0][0] # prints 1

x, y = 0, 6

print Matrix[x][y] # prints 3; be careful with indexing!

雖然您可以按照自己的意願命名它們,但我這樣看是為了避免索引可能産生的混淆,如果對内部和外部清單使用“x”,并且想要非方形矩陣 .

python中怎麼定義二維數組_如何在Python中定義二維數組

2 years ago

如果你想要的隻是一個二維容器來容納一些元素,你可以友善地使用字典:

Matrix = {}

然後你可以這樣做:

Matrix[1,2] = 15

print Matrix[1,2]

這是有效的,因為 1,2 是一個元組,并且您将它用作索引字典的鍵 . 結果類似于啞稀疏矩陣 .

如osa和Josap Valls所示,您還可以使用 Matrix = collections.defaultdict(lambda:0) ,以便缺少的元素具有預設值 0 .

Vatsal進一步指出,這種方法對于大型矩陣可能效率不高,而且隻能用于代碼的非性能關鍵部分 .