【问题标题】:adding values to numpy array to make them of equal shape将值添加到 numpy 数组以使它们具有相同的形状
【发布时间】:2018-12-14 22:02:47
【问题描述】:

我有一个名为“MEL”的 numpy 数组,形状为 (94824,)。

这些值包含不同形状的数组,例如 (99,13)、(54, 13) (87, 13)。我想用零填充小于 (99,13) 的数组,甚至更好地填充该数组的平均值。

MEL = numpy.ndarray and
for i in MEL: i = <class 'numpy.ndarray'> (i.shape = 99, 13) except for the ones that need to be filled
for j in i: j = <class 'numpy.ndarray'>

到目前为止,我有这个:

max_len = np.max([len(a) for a in MEL])
for i in MEL:
    i = np.asarray([np.pad(a, (0, max_len - len(a)), 'constant', constant_values=0) for a in i])

但形状保持不变。有什么建议吗?

【问题讨论】:

  • 您的 numpy 数组 MEL 如何包含其他数组?我猜 Mel 是一个数组列表。在这种情况下,请注意len(a) 仅返回数组第一个维度的长度。你想如何填充小数组?
  • 我知道这是一个奇怪的结构,我也不知道如何解决它我在问题中添加了一些关于它的信息
  • 我实际上不明白你是如何创建这样一个结构却没有遇到“ValueError: setting an array element with a sequence”的。
  • 我没有自己创建结构,而是将其导入为 .npy 文件。

标签: python loops numpy shapes


【解决方案1】:

根据我对您的问题的理解,MEL 是 94824 个具有不同形状的二维数组的列表。您希望返回与最大数组具有相同形状但填充为 0 的数组。

我想最简单的方法是创建具有适当形状的新数组并用以前的数组填充它们。一个小例子是:

max_dim = [np.max([a.shape[0] for a in MEL]), np.max([a.shape[1] for a in MEL])]
new_MEL = []
for a in MEL:
    temp = np.zeros((max_dim[0], max_dim[1]))
    temp[:a.shape[0], :a.shape[1]] = a
    new_MEL.append(temp)

【讨论】:

  • 显然您理解正确,因为它有效。谢谢!
猜你喜欢
  • 2017-09-09
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多