我正在寻找一种有效的方法来定义与numpy模块一起使用的可变大小数组,因为知道只有使用固定大小的数组才能实现性能。
我的解决方案是将一个列表(或元组)定义为:
test = [0] * 10
,然后使用numpy数组将“ test”的每个元素定义为:
test[0] = numpy.array([1,2,3])
test[1] = numpy.array([4,5])
...
我猜想使用这种可变大小的数组可能会导致分散的内存寻址,尽管像以前一样为“ test”的每个元素维护了向量计算。
因此,如果有一种有效的方法可以使用numpy模块定义此类数组,我将不胜感激。
答案 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])]