【问题标题】:Building a numpy array through iteration通过迭代构建一个numpy数组
【发布时间】:2018-11-21 18:23:58
【问题描述】:

我从一个形状为 (n,d) 的数组开始,其中包含 n 个长度为 d 维的粒子向量,并且想要构造一个包含形状为 (n, n,d) 我将继续使用它来计算牛顿模拟中的力等。

我希望能够将其推广到任意数量的维度,因此位置向量可以是任意 d,并提出了以下内容,在 a时间到一个列表中,然后我将其转换回一个数组。但这看起来很笨重,而且,既然它一定是一个如此常见的操作,我不禁想到有一些内置的 numpy 魔法可以更快地执行这个操作。

def delta_matrix(pos_vec):
    build=[]
    for i in pos_vec:
        build.append(i-pos_vec)
    return np.array(build)

特别是,是否有一个 numpy 方法可以执行这种迭代类型的操作?

【问题讨论】:

  • pos_vec[:,None] - pos_vec?
  • 是的,这就是我一直在寻找的东西——我仍然要完全掌握广播的细节——但是当我将如此产生的结果与更传统的迭代方法进行比较时,它们是非常快。

标签: python arrays numpy


【解决方案1】:

列表理解呢?这看起来简单却足够强大。

def delta_matrix(pos_vec):
    return np.array([i-pos_vec for i in pos_vec])

【讨论】:

  • 谢谢布拉姆,我确实喜欢很好的列表理解,但我正在寻找的答案更像是上面@Divakar 评论中的答案。它利用了 numpy 广播并测量了两者之间的性能,它始终更快 - 有时高达 10 倍。另外,您必须爱上简单的构造。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2012-11-06
  • 2019-04-07
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多