Using the same parameter n times in a function call

Hello!
I am struggling to find a way to “automate” this type of function call:

using LinearAlgebra
x = [rand() rand(); rand() rand()]
kron(x, x) #n=2
kron(x, x, x) #n=3
kron(x, x, x, x) #n=4

Basically, having a 2x2 matrix “x” I would like to use the kronecker product of x with itself n times.
Is there a way to achieve this, perhaps in a manner like:

kron(repeat(x, n))

Of course not with the repeat function, but perhaps with something else.

kron(fill(x, 3)...)
2 Likes

Thank you! “…” looks like an interesting and useful operator… haven’t encountered (or used) in other programming languages.

1 Like

Hey @Zackyzz , glad you got your question answered! Also, welcome to the Julia Community – saw it was your first post here on Discourse! :wave: Hope you enjoy your time here!

Yea, this syntax is interesting – it is called splatting and you can learn more about it here: Essentials · The Julia Language… (I am a fan of it but sometimes, it is not as efficient as maps or otherwise).

3 Likes

I am a big fan of “splat” and “slurp” as Julia’s most comical terminology.

2 Likes

In the case of kron and other associative operations, you can also do reduce(kron, fill(x, n)). That’s useful to know for many other associative functions like hcat, union etc.

3 Likes

The reduce trick is useful when n is large or not known at compile time to avoid the performance issues of splatting and slurping (...).

kronn(x,n)=n==2 ? kron(x,x) : kron(x, kronn(x,n-1))
kronn(x,n)= n==1 ? x : kron(x, kronn(x,n-1))

this is correct the above are incorrect (kron is not commutative)

kronn(x,n)= n==1 ? x : kron(kronn(x,n-1),x)
1 Like