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

beh*_*our 5 python arrays numpy

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

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

test = [0] * 10
Run Code Online (Sandbox Code Playgroud)

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

test[0] = numpy.array([1,2,3])
test[1] = numpy.array([4,5])
...
Run Code Online (Sandbox Code Playgroud)

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

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

Eri*_*ric 4

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

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])]
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果需要,您仍然可以在平面数组上进行操作:

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