gpt4 book ai didi

python - 使用 numpy 滞后向量乘法的有效方法

转载 作者:行者123 更新时间:2023-12-01 00:43:28 26 4
gpt4 key购买 nike

我正在尝试优化一种涉及多次向量乘法的算法,其中一个向量保持不变,另一个向量不断变化,直到所有计算完成。

例如,如果静态向量是

a = [3 2 0]

移动向量为

b = [2 5 6 3 8 4]

我想返回

[[6 10 0], [15 12 0], [18 6 0], [9 16 0]] ([[2], [5], [6]] * [[3], [2], [0]] = [[6], [10], [0]] and [[5], [6], [3]] * [[3], [2], [0]] = [[15], [12], [0]], etc.). Is there an efficient way to do this calculation in python/numpy? Or will I just have to loop over slices of <b>b</b> and multiply each by <b>a</b>?

我想过将 a 放入类似对角线的矩阵中:

[[3 2 0 0 0 0],

[0 3 2 0 0 0],

[0 0 3 2 0 0],

[0 0 0 3 2 0]]

并将其乘以对角化的b,例如:

[[2 0 0 0 0 0],

[0 5 0 0 0 0],

[0 0 6 0 0 0],

[0 0 0 3 0 0],

[0 0 0 0 8 0],

[0 0 0 0 0 4]]

获取:

[[6 10 0  0  0  0],

[0 15 12 0 0 0],

[0 0 18 6 0 0],

[0 0 0 9 16 0]]

但这似乎有点过多且占用空间。

希望我的问题有意义。感谢您的帮助!

最佳答案

我们可以利用np.lib.stride_tricks.as_strided基于scikit-image's view_as_windows获得滑动 window 。 More info on use of as_strided based view_as_windows 。因此,对于这些 strided-view,假设数组作为输入,它将是 -

In [7]: from skimage.util.shape import view_as_windows

In [8]: view_as_windows(b,len(a))*a
Out[8]:
array([[ 6, 10, 0],
[15, 12, 0],
[18, 6, 0],
[ 9, 16, 0]])

关于python - 使用 numpy 滞后向量乘法的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170779/

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