2D arrays in Python
在python中创建二维数组的最佳方法是什么?
我想要的是存储这样的值:
1 | X , Y , Z |
这样我就可以访问像
1 2 3 4 5 6 7 8 9 10 | >>> 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%的时候,你有一个简单的"类行对象"列表,这可能是正确的序列。
1 2 3 4 | myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ] myArray[0][1] == 3.14159 myArray[1][1] == 2.71828 |
更常见的是,它们是类、字典、集合的实例,或者是在以前的语言中没有的更有趣的实例。
1 | myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ] |
。
20%的时间你有一本字典,用一对键盘
1 | myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) } |
很少,你真的需要矩阵吗?
在Python中有大量的集合类。很可能你有比矩阵更有趣的东西。
在Python中,通常使用列表来实现这一目的。列表可以任意嵌套,从而允许创建二维数组。并非每个子列表都需要相同的大小,这样就解决了您的另一个问题。看看我链接到的例子。
如果您想对数组做一些严肃的工作,那么应该使用numpy库。例如,这将允许您执行向量加法和矩阵乘法,对于大型数组,它比Python列表快得多。
但是,numpy要求预先定义大小。当然,您也可以在列表中存储numpy数组,例如:
1 2 3 4 5 | 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数组非常小,我想与使用tuple相比会有一些开销。这完全取决于你的优先顺序。
另请参见另一个非常相似的问题(除了可变大小)。
我建议你使用这样的词典:
1 2 3 4 5 6 7 | arr = {} arr[1] = (1, 2, 4) arr[18] = (3, 4, 5) print(arr[1]) >>> (1, 2, 4) |
。
如果您不确定在字典中定义了一个条目,那么在调用"arr[x]"时需要一个验证机制,例如try except。
如果您关心内存占用,python标准库包含数组模块;这些数组包含相同类型的元素。
1 2 3 4 5 6 7 8 9 | 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) |
在这里,我创建了创建一维数组的函数,并将其作为数组成员插入到另一个数组中。一个数组中的多个一维数组,当n和i的值改变时,u创建多维数组。
请考虑以下代码:
1 2 | from numpy import zeros scores = zeros((len(chain1),len(chain2)), float) |
。