如何扩展或 "scale up" 一维数组?

How to Expand or "scale up" an 1d array?

我有一段 C 代码只能处理大小为 20 的数组。我的仪器输出的数组比函数需要的数组小得多。是否有 numpy 或数学函数可以在保持其结构完整性的同时将数组“放大”到任何特定大小?例如:

我有一个 8 元素数组,基本上是两个斜坡“锯齿”,意思是它的值是: [1 2 3 4 1 2 3 4]

我需要的 C 代码是一个包含 20 个元素的数组。所以我可以通过用 "0"s 填充原始数组的线性间隔来缩放它,比如:

[1,0,0,2,0,0,3,0,0,4,0,0,1,0,0,2,0,0,3,0]

所以它加起来有 20 个元素。我认为这个过程与“抽取”相反。 (抱歉,我正在简化这个过程,这样它会更容易理解)

根据您的示例,我想可以调整以下方法来执行您想要的操作:

  1. 带 0 的上采样:upsampled_l = [[i, 0, 0] for i in l]l 是您的初始列表
  2. 使用来自的方法展平数组 flat_l = flatten(upsampled_l) How to make a flat list out of a list of lists?例如
  3. 获取期望长度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))]).

希望对您有所帮助!

您可以在 one-liner 中管理它,方法是添加零作为另一个轴,然后展平:

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()