python中2d_Python中的2D数组

本文讨论了在Python中创建二维数组的不同方法,包括使用嵌套列表和numpy库。强调了numpy库在处理大型数组时的效率优势,同时也提到了动态调整大小的可能性和字典作为替代方案的灵活性。
摘要由CSDN通过智能技术生成

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

@但是你的代码很难阅读。

根据您所做的,您可能没有真正的二维数组。

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)

欢迎使用堆栈溢出!额外的解释会提高你的答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值