python - Python定义二维数组的耗时

标签 python arrays multidimensional-array time initialization

我想定义一个大小为 [545 333][116 109] 的二维数组以及初始化代码的下一部分 我使用以下代码

w1, h1 = 545333, 116109
X = [[0 for x1 in range (w1)] for y1 in range (h1)]
while (i <116109):
 ###### other code...........
     j = 0
     while (j <545333):
         if allfeature [j] not in eachfeature:
             X [i] [j] = 0
         else:
             X [i] [j] = 1
         j = j + 1
     i=i+1

但问题是时间长,速度慢。 您推荐什么代码?

最佳答案

FWIW,

X = [[0] * w1 for y1 in range (h1)]

X = [[0 for x1 in range (w1)] for y1 in range (h1)]

并产生相同的结果。但对于 w1, h1 = 545333, 116109,您没有足够的 RAM 来创建该列表。

更好的选择是让 X 成为一组元组,如果 allfeature[j] in everyfeature 仅适用于较小的情况,那么您可能有足够的 RAM 来实现这一点。 range(w1)j 值的数量。

这是一个简短的演示:

w1, h1 = 545333, 116109
X = set()
for j in range(w1):
    if allfeature[j] in eachfeature:
        for i in range(h1):
            X.add((i, j))

但是,由于 h1 的大小,即使这样也会使用相当多的 RAM。正如 Peter Wood 所说,可能有更好的方法来组织代码的数据和逻辑。

<小时/>

您在答案中发布的代码没有达到您想要的效果。但即使您确实有足够的 RAM 来创建该列表,它也不会包含您想要的数据,因为所有内部列表实际上都是相同的列表。

这是该行为的一个小演示:

x = []
x1 = [0, 9]
for i in range(5):
    x1[0] = i
    x.append(x1)
print(x)

输出

[[4, 9], [4, 9], [4, 9], [4, 9], [4, 9]]

相反,您需要附加 x1副本,如下所示:

x = []
x1 = [0, 9]
for i in range(5):
    x1[0] = i
    x.append(x1[:])
print(x)

输出

[[0, 9], [1, 9], [2, 9], [3, 9], [4, 9]]

关于python - Python定义二维数组的耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055696/

相关文章:

java - java中如何对二维数组的列求和

java - 打印 Java 2D 数组的最佳方法?

Javascript:如何分配给变量?

c - 学习 'Linked lists' 的速度太快,但又不太熟悉指针? #C语言初学者

c - C 中是否有查找子字符串重叠的函数?

python - 计算 sigmoid 最快的方法是什么?

python - 复杂数据集拆分 - StratifiedGroupShuffleSplit

arrays - 在数组中查找其总和最接近给定数字的三个元素

python - 使用python从Excel条件格式化文本字符串

python - 在循环的每次迭代中将函数作为 python 中的新进程运行