Eigen: the odd duck?

I reiterate a question from PR27212 in the hope it has some more visibility here.

I very much like the new interface of the matrix factorizations (or was it decompositions? :slight_smile:) in julia 0.7/1.0 and all the work that has been done here. Congrats to everbody involved.

I do have one question. I tried to look for a discussion about the name change eig to eigen . Why was this decided or deemed necessary? svd is also a three letter word so that can be it. I like the name changes from chol to cholesky and the full name hessenberg , but eig seems so standard. It’s also used by Matlab and Numpy. In fact, if it were not for eigen , the names would be identical to Numpy/Scipy: numpy.linalg.eig , numpy.linalg.svd , numpy.linalg.cholesky , scipy.linalg.hessenberg , scipy.linalg.schur.

It’s very subjective, but I personally don’t like the name eigen very much. Maybe it’s also because in Dutch (and maybe also German, cause that’s where the prefix “eigen-” originates from), eigen is a stand alone word (which in itself has nothing to do with eigenvalues).

https://github.com/JuliaLang/julia/pull/27212

Yes, that is where I posted the question first. And I also added the link in my discourse post. But I don’t see any discussion surrounding the specific case of eig->eigen.

Although I don’t have a strong opinion about the naming change, I have to say the factorization improvements in general and this question in particular gave me flashbacks to a classic children’s tale:

Maybe if you like ducks more than swans, the old name is better, though :wink:

1 Like

:slight_smile: I just read the tale (though not this seemingly very nice edition) to my 2.5 year old daughter the other day.

The Dutch (and German) word ‘eigen’ may be used as an adjective in which case it means ‘typical’, ‘characteristic’, or ‘individual’. Both the Dutch word ‘waarde’ and the German word ‘wert’ translate to ‘value’ . In 1904 the German mathematician David Hilbert coined the word `Eigenwert’ (‘eigenwaarde’ in Dutch) which means ‘characteristic value’. Think of the word ‘eigenvalue’ as a partial translation. In this context ‘eigen’ simply means ‘characteristic’.

3 Likes

I am under the impression that everything (except svd) got long names (chol → cholesky, bkfact to bunchkaufman, etc), so indeed eig was not specially treated. Why should it be?

Personally, I like the long names. And I don’t see why having identical names with Numpy/Scipy is a concern; after all this is a different library in a different language. BTW, R has eigen.

I’ve never used R, so to me eigen sounded like a deviation from matlab and numpy. Given that R uses it too, is already somewhat comforting. I also don’t have a problem with longer names. Or with names that differ from other languages. In fact, for consistency with svd, I would propose evd, but I guess nobody would be able to figure out how to compute eigenvalues then.

It’s just, eigen sounds bad. It’s like abbreviating multithreading to multi; or like abbreviating singular value decomposition to singular. It’s not an abbreviation, it’s just selecting one part out of a word which in itself does not reflect the correct meaning.

2 Likes

Probably because you understand it as a word in German? In linear algebra, especially when discussed in English, it has become decoupled from its original meaning, and means “having something to do with T(v) = \lambda v”.

2 Likes

It hasn’t become decoupled. I can’t imagine writing “eigen” where “characteristic” would not be allowed in a research paper.

1 Like

Eigenproblem?

4 Likes

Indeed, the word “eigen” by itself is meaningless. It begs the question “eigen what?”.
It is like saying “blue”. Blue what?

By the way, “eigen” also means “own” as in “my own hair (mijn eigen haar)” or
“your own problem (jouw eigen probleem)”.

Word “eigen” as adjective is found in several Germanistic languages (“eigen” in German, Dutch, Norwegian; “egen” in Danish, Norwegian, etc.), and has the same etymological root as English “own”; eigen - Wiktionary and eigen - Wiktionary.

In English (which, of course, also is a Germanistic language), the verb “to own” = “to possess” has the same form as the adjective “own” = “possessed by”, “one’s own”. English also has the noun form “owner”.

Considering verb and noun, German seems to be an the outlier: “to own” is often translated to “zu besitzen”, and “owner” is “Besitzer” – “besitzen” literally means “to sit on” in the sense of possessing, and apparently comes from Low German. But it would surprise me if there is not a verb (possibly considered archaic) approximately like “zu eigen” in German.

Nordic languages are closer to English: “to own” = “eige” or “eie” in Norwegian/Danish (“besitte” in Norwegian/Danish?), and “owner” = “eiger”/“eier” in Norwegian or “besitter” in (Norwegian)/Danish.

Dutch has “owner” = “eigenaar”, and “to own” = “om eigen” – but it seems like Dutch often expresses “to own” by “to be owner of”.

Anyway… “Eigenwerte”/“eigenwarde”/“egenverdi” (German/Dutch/Danish-Norwegian) means something like “it’s own value” or the “self value”, and obviously refers to \lambda :Av = \lambda v.

Question: is it bad/ugly to refer to some function/object by an adjective (eigen)? Not to me, perhaps because I have abstracted the meaning.

One could alternatively argue that “eige”/“eigen” is also a verb form, and as such, “eigen” could be considered an “operator”/actor/function.

Is eig better as a function name? Don’t now… in Nordic/Norwegian, “eig” would be the imperative form of verb “eige”/eie". But the origin of “eig” in MATLAB has probably nothing to do with that…

While discussions about etymology are interesting, at this point eigen is pretty much a take it or leave it feature of linear algebra terminology. The only (somewhat) relevant question for programming languages is whether to use the abbreviated eig or the full eigen.

3 Likes

True, and I should maybe have done more research. With only knowing matlab and numpy, Julia seemed like the odd duck by choosing eigen instead of eig. Some further research indeed shows R also uses eigen, numlua uses eig, and the C++ Library Eigen does not use an abbreviation for computing the eigenvalue decomposition (oh the irony).

Many other libraries just use the LAPACK name geev. Symbolic software (Mathematica & Maple) tends not too abbreviate.

And this overview page Comparison of linear algebra libraries - Wikipedia uses EVD (my alternative proposal, because I like the consistency with svd) and then spells it out as: EVD - eigenproblems. :slight_smile:

So I guess it does not matter too much, the landscape is already quite diverse.

2 Likes

In the spirit if discussing simething that has already been decided and will not change may I propose “spectrum”. It has the distinct advantage that it reduces to eigenvalues for matrices, is a shorter word, generalises to operators and most importantly serves as a reminder that Julia now wants to be as distinct from Matlab as possible.

I strongly disagree with changing names and other things just for the sake of distancing Julia from domain-leading software. I think it should be just the opposite. Follow the convention, or what people most likely know, until a convincing argument to do otherwise is accepted. If there is a good reason, by all means change it.

Julia used to be much more matlab-like in appearance, which was a good thing. It still is often superficially python-like (eg comprehensions), which is also a good thing. Names and syntax have become less matlab-like because developers believed that the changes made Julia a better language, not because of an emotional response to matlab.

In fact one of the guidelines in designing Julia was to avoid innovative syntax. (This is written somewhere.)

Maybe I should be put this in a block [sarcasm] … [/sarcasm]. I am actually entirely of the same opinion as you. But I’m afraid this argument has long been lost…

2 Likes

Ah, reading more carefully, I guess I see this. It serves me right for being drawn yet again into useless bikeshedding.

“Eigen the odd duck” would be a great name for a children’s book :duck: :children_crossing: :blush:

11 Likes