gpt4 book ai didi

python - 乘以无循环的矩阵列表

转载 作者:行者123 更新时间:2023-12-05 04:26:26 25 4
gpt4 key购买 nike

大家好,感谢您的帮助。我是 python 的新手,未能为以下任务找到 for 循环的有效替代方法。

我想乘以维度 (d,n,m)(d,m) 的 ndarrays AB ,分别。为了帮助理解,滥用了一些术语,Anxm 矩阵的列表,BR^ 中的向量列表米

例如:

A = np.array([[[0,0,0,0,0],[1,1,1,1,1],[2,2,2,2,2]],[[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]])
B = np.array([[1,2,3,4,5],[5,6,7,8,9]])

我的解决方案使用 for 循环

for i in range(2):
print(A[i]*B[i])

是否有更便宜的替代方案(无循环)?​​

再次感谢

最佳答案

在这种情况下,您可以通过在 B 的“中间”添加一个新维度来使用广播:

>>> import numpy as np
>>> A = np.array([[[0,0,0,0,0],[1,1,1,1,1],[2,2,2,2,2]],[[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]])
>>> B = np.array([[1,2,3,4,5],[5,6,7,8,9]])
>>> A * B[:, None, :]
array([[[ 0, 0, 0, 0, 0],
[ 1, 2, 3, 4, 5],
[ 2, 4, 6, 8, 10]],

[[15, 18, 21, 24, 27],
[20, 24, 28, 32, 36],
[25, 30, 35, 40, 45]]])

Here is a link to the official docs

请注意,您的原始解决方案已经依赖于广播:

>>> A[0]
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2]])
>>> B[0]
array([1, 2, 3, 4, 5])
>>> A[0] * B[0]
array([[ 0, 0, 0, 0, 0],
[ 1, 2, 3, 4, 5],
[ 2, 4, 6, 8, 10]])

关于python - 乘以无循环的矩阵列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73057230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com