gpt4 book ai didi

python - Numpy:n 个向量的外积

转载 作者:太空狗 更新时间:2023-10-29 20:20:20 29 4
gpt4 key购买 nike

我正在尝试在 numpy 中做一些简单的事情,我相信应该有一种简单的方法来做这件事。

基本上,我有一个包含各种长度的 n 向量的列表。如果 v1[i] 是第一个向量的第 i 个条目,那么我想找到一个 n 维数组 A,例如那个

A[i,j,k...] = v1[i] v2[j] v3[k] ...

我的问题是:

  1. outer 只需要两个 vector 参数。

  2. einsum 需要一个像“abcd...”这样的参数,这似乎是不必要的。

  3. kron 需要看起来相当复杂的 reshape ,并且只接受两个参数。

我想尽可能避免复杂性,以避免引入错误。所以最好我想要一个命令。

到目前为止,我掌握的最好的是:

 vs = [v1, v2, v3 ...]
shape = map(len, vs)

# specify the orientation of each vector
newshapes = diag(array(shape)-1)+1
reshaped = [x.reshape(y) for x,y in zip(vs, newshapes)]

# direct product
A = reduce(lambda a,b: a*b, reshaped, 1)

最佳答案

您使用以下一行代码:

reduce(np.multiply, np.ix_(*vs))

np.ix_() 将执行外部广播,您需要 reduce,但您可以传递没有 lambda 函数的 ufunc np.multiply

这里是比较:

import numpy as np
vs = [np.r_[1,2,3.0],np.r_[4,5.0],np.r_[6,7,8.0]]
shape = map(len, vs)

# specify the orientation of each vector
newshapes = np.diag(np.array(shape)-1)+1
reshaped = [x.reshape(y) for x,y in zip(vs, newshapes)]

# direct product
A = reduce(lambda a,b: a*b, reshaped, 1)
B = reduce(np.multiply, np.ix_(*vs))

np.all(A==B)

结果:

True

关于python - Numpy:n 个向量的外积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17138393/

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