如何有效地定义可变大小的numpy数组?

时间:2018-09-20 06:22:26

标签: python arrays numpy

我正在寻找一种有效的方法来定义与numpy模块一起使用的可变大小数组,因为知道只有使用固定大小的数组才能实现性能。

我的解决方案是将一个列表(或元组)定义为:

test = [0] * 10

,然后使用numpy数组将“ test”的每个元素定义为:

test[0] = numpy.array([1,2,3])
test[1] = numpy.array([4,5])
...

我猜想使用这种可变大小的数组可能会导致分散的内存寻址,尽管像以前一样为“ test”的每个元素维护了向量计算。

因此,如果有一种有效的方法可以使用numpy模块定义此类数组,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以在后台创建一个大型分配,并创建一堆较小的视图:

backing = np.empty(10, np.int32)
my_data = [
    backing[0:2],
    backing[2:5],
    backing[5:10]
]

my_data[0][...] = [1, 3]
my_data[1][...] = [1, 3, 5]
my_data[2][...] = [1, 3, 5, 7, 9]
print(my_data)
# [array([1, 3]), array([1, 3, 5]), array([1, 3, 5, 7, 9])]

这具有很大的好处,如果需要,您仍然可以在平面阵列上进行操作:

backing += 1  # add to all sublists
print(my_data)
# [array([2, 4]), array([2, 4, 6]), array([ 2,  4,  6,  8, 10])]