我试图在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数组会更好。我猜这个字典对于这么大的数据来说性能会很慢。
答案 0 :(得分:1)
我对你对这个问题的解释并不是很了解,但是从你写的内容来看,这听起来像普通的list
就可以了:
arr1 = []
if (your condition here):
arr1.append(A[i][0])
内存管理是动态的,即它根据需要分配新内存,如果你需要一个numpy数组,只需要numpy_array = np.asarray(arr1)
。
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可以有不同的大小。
- 但数组的列表会起作用,因为列表中的项目可以是任何内容,包括不同大小的数组。