python - 如何在范围内为 i 向量化 np.dot(vector_a, vector_b[ :, i]) ?

标签 python arrays numpy vectorization dot-product

我有一个形状为 (3,1) 的 numpy 数组 vector_a。如果我将它与形状 (1,3) 的 vector_b 相乘,我会得到形状 (3,3) 的结果。

现在,vector_b 实际上是一个 (3,N) numpy 列向量数组。我想将这些列向量中的每一个乘以 vector_a 以生成 N 个 3x3 矩阵,结果形状为 (N,3,3)

我做了以下事情:

r = np.dot(vector_a.reshape(1,3,1), vector_b.T.reshape(N, 1, 3))

我期望 r 的形状为 (N,3,3) 但我得到的形状为 (1,3,64,3)???我不知道为什么我会得到这种形状。 vector_a 和 vector_b 都是 C 连续的。在执行 vector_b.T.reshape(N, 1, 3) 之前,我尝试将 vector_b 转换为 F contiguous,但我仍然得到相同的 r 形状 (1,3,64,3)。

有人知道如何写出正确的表达方式吗?

最佳答案

作为替代解决方案,如果您使用 einsum ,您可以避免为点积 reshape 数组:

np.einsum('ij,jk->kij', vector_a, vector_b)

关于python - 如何在范围内为 i 向量化 np.dot(vector_a, vector_b[ :, i]) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138340/

相关文章:

python - 在 Python 中插入周期性数据

python - Twitter API 返回 401(未经授权),处理您的请求时发生错误

python - numpy.argmax 比 MATLAB [~,idx] = max() 慢吗?

python - Python 中最大回撤的开始、结束和持续时间

python - 求解两个变量的方程组 - Python

Python ctypes c_float.value 不返回值

python - NumPy 。如何将二维数组按网格分割为多个数组?

c - 使用固定大小的数组时的垃圾值,而如果使用动态大小的数组,则结果正确

c# - 如何在 C# 中将 2D 列表转换为 2D 数组

python - 为不同的 ndarray 索引分配相同的值 - Python