From 9159ef6af1159ff58ba641339bca4298da6b7cc1 Mon Sep 17 00:00:00 2001 From: David Hong Date: Thu, 29 Feb 2024 22:56:43 -0500 Subject: [PATCH] Add back simpler Khatri-Rao To save improvements of this function for another more focused PR. --- src/gcp-opt.jl | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/gcp-opt.jl b/src/gcp-opt.jl index 8343d6e..29c62cb 100644 --- a/src/gcp-opt.jl +++ b/src/gcp-opt.jl @@ -249,11 +249,10 @@ function khatrirao(A::Vararg{T,N}) where {T<:AbstractMatrix,N} end # General case: N > 1 - r = size(A[1], 2) - all(==(r),size.(A,2)) || throw(DimensionMismatch()) - R = ntuple(Val(N)) do k - dims = (ntuple(i -> 1, Val(N - k))..., :, ntuple(i -> 1, Val(k - 1))..., r) - return reshape(A[k], dims) + r = (only ∘ unique)(size.(A, 2)) + K = similar(A[1], prod(size.(A, 1)), r) + for j in 1:r + K[:, j] = reduce(kron, [view(A[i], :, j) for i in 1:N]) end - return reshape(broadcast(*, R...), :, r) + return K end