python - 如何在 Python 中模拟更大的周期性数组
问题描述
我想将一对 d 维数组传递给 scipy.signal.correlate,但我希望它被计算为好像两个输入在每个方向上都是周期性的。所以,在一维中,如果我的数组是[1,2,3]
and [4,5,6]
,我想传递给 scipy.signal.correlate [1,2,3,1,2,3,1,2,3]
and [4,5,6,4,5,6,4,5,6]
,这将给我一个大小为 17 的新数组,然后我将剪掉中间的 9 个元素。但是,如果可能的话,我不想在内存中实际复制输入数组的完整数据,这会将输入的大小乘以 3^d,而只是提供数组的视图,就好像它们是平铺的一样变成一个大 3^d 的超立方体。虽然,我知道相关函数的输出仍然会给我一个比输入数组大小的 3^d 倍大得多的结果。
numpy.tile似乎做我想做的事。
a = [[1, 2, 3],
[2, 4, 6],
[3, 6, 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 倍内存。
解决方案
我不确定这是否有帮助,但是 - wrt你上面的例子 - 看看:
l1 = [1, 2, 3] * 3
l2 = [2, 4, 6] * 3
l3 = [3, 6, 9] * 3
m = [l1, l2, l3, l1, l2, l3, l1, l2, l3]
print(m)
m[0][0] = 100
print(m)
前 3 个数组m
必须存储数据,其余指向前 3 个。如果这不是您感兴趣的,请告诉我:如果不是,我将删除答案。
推荐阅读
- serverless - 无服务器配置中的“发布”属性
- php - 在 Wordpress 中显示格式化电子邮件的问题
- python - python webbrowser.opn('https://earth.google.com/web/search/')
- java - Apache NetBeans 12.1 是否支持 JDK 15?
- sql - SQL - CASE 语句:“不一致的数据类型:预期 DATE 得到 CHAR”
- java - jpa 使用带有 id 和 id 的 2 @param 删除错误
- c# - Specflow - 在特征文件中使用来自外部文件的数据
- github - 如何修复在 URI 'https://api.github.com/repos/actions/checkout/tarball/v1 中找不到操作
- angular - 如何在 mat-stepper 中销毁组件
- c# - c# WPF 用户控制代码隐藏如何交互到 MainWindow 代码隐藏?