(4,4,8 | 180)
@francisco-dlp and @tjof2
@Mingquan_Xu_twitter, if you try centring EELS data you will see that it'll lead to one more significant component in the scree plot comparted to standard SVD without poisson scaling. That extra component is needed to account for the unnecessary centring step and is thefore deleterious for the purposes of denoising and blind source separation. Unfortunately there is a lot of confusion about this in the EELS litterature.
So I have done just this (Possion = True and Centre =Trials) on some EDS data. I am getting significantly better PCA results than without doing this step. So a) what I would wonder is if you could elucidate more on this incompatibility (feel free to just give me a citation to chase) and b) if I am seeing this on EDS to work, why would it not work on EELS. Really, I just want to get more at the statement:
plain SVD works better for our application.
What does this mean? how does it work better? It is not clear from the hyperspy documentation why this choice is being made.
In my case here, I have significant electronic noise of some kind on the EDS data (no i can not go and recollect - sample has been lost), which standard non-centring results in the first SVD component being this noise. Further, without the Poissonian normalisation, while I can get two components to describe messy system, it still leaves the results underdetermined, and unable to locate all the phases I am actually interested in.
@francisco-dlp is there a chance you could take a quick look at the robust NMF PR I've had open for a while (#2035)? It's only got a little bit of stuff left to review I think.
The reason I ask is I'd like to tackle the decomposition documentation to answer many of the issues raised here and in #1159, but since the PR above also makes changes to the documentation, I want to tackle them one-after-the-other to make life simpler.
Is the following a bug? Or is there some other dictionary expected by
Signal2D? I'd quite like to use this sort of implementation in #1243.
s = hs.signals.Signal1D([1,2,3]) hs.signals.Signal1D(data = s.data, axes=s.axes_manager.as_dictionary()) ---- ... TypeError: _append_axis() argument after ** must be a mapping, not str
I think the
axes parameter expects a list of axis dictionaries. You can unpack axes from the
axes_manager.as_dictionary() result in the following way:
mappingdictionary to map metadata from
metadatawhen the file is loaded