【问题标题】:Python: Collapsing arrays of arrays into each other without for loopsPython:在没有for循环的情况下将数组数组相互折叠
【发布时间】:2020-07-09 20:43:54
【问题描述】:

假设我在 Python 3 中将多个 NxN 2D 数组存储到一个列表中。我想将所有数组折叠成 1 个数组,具有相同的维度 NxN,但是这个新数组的每个元素都包含一个 1xN 数组原始数组中的对应值。

为了给您提供更多上下文,此列表中的每个数组都对应于给定时间的一组值。对于每个新的时间点,我将该数组的更新版本存储到列表中。完成后,我想计算数组中每个 (i,j) 元素的值的标准差。

我尝试使用 for 循环,但我的模拟需要的时间太长,因为这是一组 100,000 个数组。我想知道是否有任何 numpy 或矢量化函数可以帮助我更有效地执行此操作。谢谢!

【问题讨论】:

  • 例如,我认为您不能将列表作为 numpy 数组元素;你的意思是向数组添加一个额外的维度,使其成为一个 3d 数组?
  • 例如,如果xy 都是3x3 numpy 数组,那么numpy.stack([x, y]) 将是一个2x3x3 数组,或者numpy.stack([x,y], axis=2) 将是一个3x3x2 数组(轴默认为0) .
  • @alaniwi 您可以将列表作为 numpy 数组元素。事实上,您可以将任何对象存储为 numpy 元素。
  • @Ehsan 有趣,我不知道。 (刚刚没有使用在 python 3 下运行 numpy 的机器,我在 Python 2.7 安装上尝试了它并得到了ValueError: setting an array element with a sequence。)但是在这种情况下它是否有任何有用的目的,每个元素都有一个列表(所有相同的长度) 与具有额外维度的数组相比?我怀疑不是。

标签: python arrays numpy


【解决方案1】:

假设l 是您的数组列表。您需要将这些数组的相应元素的 std 放入单个数组中:

std_l = np.std(np.stack(l),axis=0)

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2017-03-25
    • 2019-12-06
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2019-02-16
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多