Python将两个不等大小的数组相乘

时间:2014-11-05 18:08:16

标签: python arrays numpy

我有3000步的x = 2000到5000的振幅曲线和50000步的x = 0到10000的数据曲线。现在我想对数据进行标准化(与幅度曲线相乘),但正如您所看到的,这两个数组长度不等,起点不同。

有没有办法在不重新调整其中一个的情况下这样做? (幅度范围之外的所有值都可以为零)

3 个答案:

答案 0 :(得分:0)

你说你不想调整列表的大小,所以你可能只需要使用while循环迭代两个列表并跟踪每个数组的索引。当你到达范围的一端时停止循环。

您还可以使用zip和map函数执行类似

的操作
>>> b = [2, 4, 6, 8]
>>> c = [1, 3, 5, 7, 9]
>>> map( lambda x :  x[0]*x[1], zip(b, c[1:]))
>>> [6, 20, 42, 72]

但我不确定你是否“可以”这样做。

答案 1 :(得分:0)

您可以规范化两个不等大小的数组,但您必须做出一两个关于对您的应用程序有意义的决定。

示例代码:

a1 = [1,2,3,4]
a2 = [20,30]

如果我想将a1中的值缩放a2,我应该怎么做?

  • 按索引成对,丢弃额外长度
  • 在a2中复制索引以填充其长度
  • 具有固定值的a2中的pad值
  • 在a2中插值以创建新数据点,同时增加其长度

对您的数据做有意义的事情。

答案 2 :(得分:0)

如果您对如何定义行和列标签非常聪明,可以使用pandas进行此操作。当您将数据帧相乘时,pandas将对齐列和行标签匹配的数据。标签不匹配的值将设置为NaN。请考虑以下示例:

# every other step
df1 = pandas.DataFrame(
    data=np.arange(1, 10).reshape(3, 3), 
    columns=[1, 3, 5], 
    index=[0, 2, 4]
)
print(df1)

   1  3  5
0  1  2  3
2  4  5  6
4  7  8  9

# every step
df2 = pandas.DataFrame(
    data=np.arange(0, 25).reshape(5, 5), 
    columns=[1, 2, 3, 4, 5], 
    index=[0, 1, 2, 3, 4]
)

    1   2   3   4   5
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

print(df1 * df2)

     1   2    3   4    5
0    0  --    4  --   12  # <-- labels match
1   --  --   --  --   --
2   40  --   60  --   84  # <-- labels match
3   --  --   --  --   --
4  140  --  176  --  216  # <-- labels match
#   ^        ^        ^ 
#   |        |        |