[英]2D arrays in Python
在Python中創建2D數組的最佳方法是什么?
我想要的是存儲這樣的值:
X , Y , Z
這樣我就可以訪問X[2],Y[2],Z[2]
或X[n],Y[n],Z[n]
,其中n
是可變的。 我沒有在一開始知道有多大n
會,所以我想在最后追加值。
>>> a = []
>>> for i in xrange(3):
... a.append([])
... for j in xrange(3):
... a[i].append(i+j)
...
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>>
根據你正在做的事情,你可能沒有二維陣列。
80%的時候你有簡單的“行狀對象”列表,這可能是正確的序列。
myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]
myArray[0][1] == 3.14159
myArray[1][1] == 2.71828
更常見的是,它們是一個類或字典或集合的實例,或者您以前的語言中沒有的更有趣的東西。
myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]
20%的時間你有一本字典,由一對鍵入
myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) }
很少,你真的需要一個矩陣。
Python中有大量的集合類。 你有比矩陣更有趣的東西是好的。
在Python中,通常會使用列表來實現此目的。 列表可以任意嵌套,從而允許創建2D數組。 並非每個子列表都需要具有相同的大小,以便解決您的其他問題。 看看我鏈接的例子。
如果你想對數組做一些認真的工作,那么你應該使用numpy庫 。 這將允許您進行矢量加法和矩陣乘法,對於大型數組,它比Python列表快得多。
但是,numpy要求大小是預定義的。 當然,您也可以將numpy數組存儲在列表中,例如:
import numpy as np
vec_list = [np.zeros((3,)) for _ in range(10)]
vec_list.append(np.array([1,2,3]))
vec_sum = vec_list[0] + vec_list[1] # possible because we use numpy
print vec_list[10][2] # prints 3
但是由於你的numpy數組非常小,我想與使用元組相比有一些開銷。 這一切都取決於你的優先事項。
也看到此其它問題 ,這是非常相似(除了可變大小)。
我建議你使用這樣的字典:
arr = {}
arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)
print(arr[1])
>>> (1, 2, 4)
如果您不確定字典中是否定義了條目,則在調用“arr [x]”時需要驗證機制,例如try-except。
如果您擔心內存占用,Python標准庫包含數組模塊 ; 這些數組包含相同類型的元素。
請考慮以下代碼:
from numpy import zeros
scores = zeros((len(chain1),len(chain2)), float)
x=list()
def enter(n):
y=list()
for i in range(0,n):
y.append(int(input("Enter ")))
return y
for i in range(0,2):
x.insert(i,enter(2))
print (x)
這里我創建了一個函數來創建一維數組並作為數組成員插入到另一個數組中。 一個數組內的多個1-d數組,當n和i的值改變時,你創建了多維數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.