python中2d_Python中的2D数组
在python中创建⼆维数组的最佳⽅法是什么?
我想要的是存储这样的值:
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]]
>>>
我会⽤⼀种实⽤的⽅式来写这篇⽂章——这要简洁得多:a = [[i + j for j in range(3)] for i in range(3)]。
@但是你的代码很难阅读。
python 定义数组根据您所做的,您可能没有真正的⼆维数组。
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中,通常使⽤列表来实现这⼀⽬的。列表可以任意嵌套,从⽽允许创建⼆维数组。并⾮每个⼦列表都需要相同的⼤⼩,这样就解决了您的另⼀个问题。看看我链接到的例⼦。
如果您想对数组做⼀些严肃的⼯作,那么应该使⽤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数组⾮常⼩,我想与使⽤tuple相⽐会有⼀些开销。这完全取决于你的优先顺序。
另请参见另⼀个⾮常相似的问题(除了可变⼤⼩)。
我考虑过这个问题,是的,这是⼀个有⽤的补充。不过,numpy需要固定长度的数组,这不是事实吗?
是的,谢谢,我修改了答案,以便更清楚地回答这个问题。
我建议你使⽤这样的词典:
arr = {}
arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)
print(arr[1])
>>> (1, 2, 4)
。
如果您不确定在字典中定义了⼀个条⽬,那么在调⽤"arr[x]"时需要⼀个验证机制,例如try except。
如果你想要⼀个多维的"数组",你可以在字典中使⽤元组作为键,⽐如:arr[(1,20)]=12
如果您关⼼内存占⽤,python标准库包含数组模块;这些数组包含相同类型的元素。
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创建多维数组。
请考虑以下代码:
from numpy import zeros
scores = zeros((len(chain1),len(chain2)), float)
。
欢迎使⽤堆栈溢出!额外的解释会提⾼你的答案。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论