提问人:Buck Stuck 提问时间:5/5/2022 更新时间:5/6/2022 访问量:158
如何扩展或“扩展”一维数组?
How to Expand or "scale up" an 1d array?
问:
我有一段 C 代码,只能处理大小为 20 的数组。我的仪器输出的阵列比函数所需的数组小得多。是否有 numpy 或 math 函数可以将数组“放大”到任何特定大小,同时保持其结构完整性?例如:
我有一个 8 元素数组,它基本上是一个双斜坡“锯齿”,这意味着它的值是: [1 2 3 4 1 2 3 4]
我需要的 C 代码是一个 20 元素数组。因此,我可以通过用“0”填充原始数组的线性间隔来扩展它,例如:
[1,0,0,2,0,0,3,0,0,4,0,0,1,0,0,2,0,0,3,0]
所以它加起来有 20 个元素。我认为这个过程与“抽取”相反。(我很抱歉,我正在简化这个过程,所以它会更容易理解)
答:
1赞
Baobab
5/5/2022
#1
根据您的示例,我想可以调整以下方法以执行您想要的操作:
- 带有 0 的 upsample:作为您的初始列表
upsampled_l = [[i, 0, 0] for i in l]
l
- 使用How to make a flat list of list?(如何从列表列表中制作平面列表?)中的方法展平数组
flat_l = flatten(upsampled_l)
- 获取预期的长度
final_l = flat_l[:20]
例如,以下代码给出了您在示例中给出的输出:
l = [1, 2, 3, 4, 1, 2, 3, 4]
upsampled_l = [[i, 0, 0] for i in l]
flat_l = [item for sublist in upsampled_l for item in sublist]
final_l = flat_l[:20]
但是,初始列表的最后一个元素(第二个 4)在最终列表中丢失。也许值得在两者之间只有一个 0 进行上采样(而不是 ),最后做。[i, 0]
[i, 0, 0]
final_l.extend([0 for _ in range(20 - len(final_l))])
希望这有帮助!
1赞
Derek T. Jones
5/6/2022
#2
您可以通过添加零作为另一个轴,然后展平来在单行中管理它:
sm = np.array([1, 2, 3, 4, 1, 2, 3, 4])
np.concatenate([np.reshape(sm, (8, 1)), np.zeros((8, 3))], axis=1).flatten()
评论