I couldn’t find a function to generate an identity matrix of a particular size in the ndarray API - am I just missing it?
My current solution is -
Is this really the best way to do this?
Currently there’s no
eye method, beyond
Just ran a few benchmarks on this, and I think you already have the best option (staying within Python).
I tried starting with
mxnet.nd.zeros and setting the diagonal to 1, and using
mxnet.nd.scatter_nd, but both were slower in Python. You’d get much better results by dropping down into the C++ code, and setting the diagonal there.
So the way I did it is fine? Not having an eye function is strange-
Certainly does the job; and it looks quick to me. Only other avenue I can think of would be to create a sparse matrix but I agree, an eye function would be more elegant. You might want to raise a Github issue for this.
You are right, this is missing.
I wrote useful customop’s, to make a diagonal matrix from a vector and extract a diagonal from a matrix. Can point you to the code if you are interested.
@mseeger that would be great! What did you think of the kronecker product hack (another question)? Btw - this is actually really fast the way I did it
I worked on eye API in https://github.com/apache/incubator-mxnet/pull/8225. I will finish it as soon as possible. Thanks.