Tôi đang cố gắng làm một cái gì đó đơn giản trong gumpy, và tôi chắc chắn rằng phải có một cách dễ dàng để làm điều đó.Numpy: sản phẩm ngoài của n vectơ
Về cơ bản, tôi có danh sách các vector n
có độ dài khác nhau. Nếu v1[i]
là i
'xâm nhập của các vector đầu tiên ngày sau đó tôi muốn tìm một mảng chiều n
, A, như vậy mà
A[i,j,k...] = v1[i] v2[j] v3[k] ...
Vấn đề của tôi là:
outer
chỉ mất hai vectơ đối số.einsum
yêu cầu thông số như "abcd ..." có vẻ không cần thiết.kron
yêu cầu những gì có vẻ như định hình lại khá phức tạp và chỉ mất hai đối số.
Tôi muốn tránh nhiều phức tạp nhất có thể, để tránh giới thiệu lỗi. Tốt nhất là tôi muốn một lệnh duy nhất.
Cho đến nay, là tốt nhất Tôi có một số lên với là:
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)
Số lượng vectơ không được biết cho đến khi thời gian chạy? – DarenW
@ DarenW có, điều đó là chính xác. – Lucas
Tôi thích điều này 'giảm (lambda a, b: a [..., np.newaxis] * b, vs)' nhưng tôi không chắc liệu điều đó có thể được coi là "một lệnh duy nhất" hay không. Hoặc nếu có cách nhanh hơn. – jorgeca