在python

时间:2017-07-10 14:56:31

标签: python

我试图在python中创建可变数量的变量(数组)。

我有一个实验数据库,我从中提取数据。我无法控制数据库或如何写入数据。我以表格的形式提取数据 - 首先(或从python的角度看第0列)具有位置ID,后续列具有多次迭代的读数。位置ID(第0列)跨越数百万行,因此迭代的读数将在后续列中捕获。所以我读了数据库并创建了这个巨大的表。

在下一步中,我将列索引1循环到n(第0列有位置),我试图得到这个 - 如果2个读数的差异大于0.001,则将位置id写入数组。

 if ( (A[i][j+1] - A[i][j]) > 0.001): #1<=j<=n, 0<=i<=max rows in the table
   then write A[i][0] i.e. location id to an array, arr1[m][n] = A[i][0]

问题:它正在创建动态数量的变量,例如arr1。我将每个循环迭代的结果存储在一个数组中,列j的数量只在运行时知道。那么如何创建可变数量的变量,如arr1?其次,像arr1这些变量中的每一个都可以有不同的大小。

我看了类似的问题,但多维数组不起作用,因为每个arr1可以有不同的大小。此外,性能很重要,所以我猜测numpy数组会更好。我猜这个字典对于这么大的数据来说性能会很慢。

2 个答案:

答案 0 :(得分:1)

我对你对这个问题的解释并不是很了解,但是从你写的内容来看,这听起来像普通的list就可以了:

arr1 = []

if (your condition here):
    arr1.append(A[i][0])

内存管理是动态的,即它根据需要分配新内存,如果你需要一个numpy数组,只需要numpy_array = np.asarray(arr1)

python中列表上的一个(非常)小引物:

python中的列表是一个可变容器,用于存储对任何类型对象的引用。与C ++不同,在python列表中,您的项目可以是任何内容,并且您在定义列表大小时不必指定列表大小。 在上面的示例中,arr1最初定义为空,每次调用arr1.append()时,都会在列表末尾推送对A[i][0]的新引用。

例如:

a = []
a.append(1)
a.append('a string')
b = {'dict_key':'my value'}
a.append(b)
print(a)

显示:

[1, 'a string', {'dict_key': 'my value'}]

正如您所看到的,列表并不真正关心您追加的内容,它会存储对该项目的引用并将其大小增加为1.

我强烈建议您查看daa structures documentation,以便进一步了解列表的工作方式及其中的一些注意事项。

答案 1 :(得分:0)

  

我看了类似的问题,但多维数组不起作用,因为每个arr1可以有不同的大小。

- 但数组的列表会起作用,因为列表中的项目可以是任何内容,包括不同大小的数组。