python - 将 2 个暗淡的 numpy 数组与向量相乘得到 3 个暗淡的数组

标签 python numpy

假设我有一个二维数组和一个一维数组

In [127]: A = np.array([[1, 2],[3, 4]])

In [128]: B = np.array([10, 100])

我想要实现的是获得一个 3d 数组 C,其中 C[:, :, 0] = A*B[0]C[:, :, 1] = A*B[1]。我能够通过 np.einsum 做到这一点,但看起来有点矫枉过正。

In [129]: np.einsum('ij, k -> ijk', A, B)[:, :, 0]
Out[129]: 
array([[10, 20],
       [30, 40]])

In [130]: np.einsum('ij, k -> ijk', A, B)[:, :, 1]
Out[130]: 
array([[100, 200],
       [300, 400]])

有没有更简单的版本?

最佳答案

要使用B 沿着第一个轴缩放,我们可以简单地使用broadcasting像这样 -

B[:,None,None]*A # with einsum : np.einsum('ij, k -> kij', A, B)

要获得 C[:, :, 0] = A*B[0] 和 C[:, :, 1] = A*B[1] 的等价物,我们需要改为扩展 A -

A[...,None]*B # with einsum : np.einsum('ij, k -> ijk', A, B)

由于此处没有减少和,基于广播的会比einsum更快。

关于python - 将 2 个暗淡的 numpy 数组与向量相乘得到 3 个暗淡的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50391572/

相关文章:

python - 如果列中的值匹配,则合并 Pandas 数据框

python - 如何让 Pylint 识别 NumPy 成员?

python - PyQt 窗口不显示

python - 模块对象没有属性 'create_frame'

python - NumPy 数组可以有值的元组吗?

python - 从 SQL 数据库导入表并按日期过滤行时,将 Pandas 列解析为 Datetime

python - Pandas ,基于列值的条件列分配

python - 使用切片的 numpy 数组赋值

python - 测试 REST API

python - '>' not supported between instances of ' IntVar' 和 'IntVar'