问题描述
我想将一对d维数组传递给scipy.signal.correlate,但我希望对它进行计算,就像两个输入在每个方向上都是周期性的一样。因此,在一维中,如果我的数组是[1,2,3]
和[4,5,6]
,我想传递给scipy.signal.correlate [1,3,1,6,4,6]
,这将给我返回大小为17的新数组,然后我将剪掉其中的9个元素。但是,如果可能的话,我不想在内存中实际复制输入数组的完整数据,这会将输入的大小乘以3 ^ d,而只需提供数组的视图就好像它们是平铺的一样变成更大3 ^ d的超立方体。但是,我知道相关函数的输出仍然会给我一个比输入数组大小大3倍的结果。
numpy.tile似乎可以满足我的要求。
a = [[1,3],[2,6],[3,9]]
tiled_a = numpy.tile(a,numpy.ones(a.ndim,int) * 3)
print(tiled)
正确屈服
[[1 2 3 1 2 3 1 2 3]
[2 4 6 2 4 6 2 4 6]
[3 6 9 3 6 9 3 6 9]
[1 2 3 1 2 3 1 2 3]
[2 4 6 2 4 6 2 4 6]
[3 6 9 3 6 9 3 6 9]
[1 2 3 1 2 3 1 2 3]
[2 4 6 2 4 6 2 4 6]
[3 6 9 3 6 9 3 6 9]]
但是我不认为这只是一个视图,实际上占用的内存是原始数组的9倍。
解决方法
我不确定是否有帮助,但是-w.r.t.您上面的示例-查看:
l1 = [1,2,3] * 3
l2 = [2,4,6] * 3
l3 = [3,6,9] * 3
m = [l1,l2,l3,l1,l3]
print(m)
m[0][0] = 100
print(m)
m
中的前3个数组必须存储数据,其余的指向前3个数组。请让我知道您是否不感兴趣:如果没有,我将删除答案。