【问题标题】:Python/Numpy - Cross Product of Matching Rows in Two ArraysPython/Numpy - 两个数组中匹配行的叉积
【发布时间】:2013-03-25 22:56:16
【问题描述】:

获取两个数组之间每个对应行的叉积的最佳方法是什么?例如:

a = 20x3 array
b = 20x3 array
c = 20x3 array = some_cross_function(a, b) where:
c[0] = np.cross(a[0], b[0])
c[1] = np.cross(a[1], b[1])
c[2] = np.cross(a[2], b[2])
...etc...

我知道这可以通过一个简单的 python 循环或使用 numpy 的 apply_along_axis 来完成,但我想知道是否有任何好的方法可以完全在 numpy 的底层 C 代码中做到这一点。我目前使用一个简单的循环,但这是迄今为止我的代码中最慢的部分(我的实际数组有数万行长)。

【问题讨论】:

    标签: python numpy cross-product


    【解决方案1】:

    当我意识到我的错误时,我可能不得不在几分钟内删除这个答案,但显而易见的事情不起作用吗?

    >>> a = np.random.random((20,3))
    >>> b = np.random.random((20,3))
    >>> c = np.cross(a,b)
    >>> c[0], np.cross(a[0], b[0])
    (array([-0.02469147,  0.52341148, -0.65514102]), array([-0.02469147,  0.52341148, -0.65514102]))
    >>> c[1], np.cross(a[1], b[1])
    (array([-0.0733347 , -0.32691093,  0.40987079]), array([-0.0733347 , -0.32691093,  0.40987079]))
    >>> all((c[i] == np.cross(a[i], b[i])).all() for i in range(len(c)))
    True
    

    【讨论】:

    • 你是对的。我以为我已经尝试过这个并遇到了问题,但我自己又试了一次,它奏效了。我一定是第一次做错了什么。谢谢。
    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多