Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

ippsSVDSort_32f_D2

astrasel
Beginner
497 Views
Are there any plans to create a 'ippsSVDSort_32f_D2'?

(There is the existing 'ippsSVDSort_64f_D2' method but when we need this operaion on 32 bit floating point data, we must convert first, call the 64 bit method, then convert back.)
0 Kudos
7 Replies
PaulF_IntelCorp
Employee
497 Views

I'm very sorry, but we have no current plans to enhance this function.

'ippSVDSort' is part of the speech recognition domain. The speech recognition domain has been removed from the 7.0 product and will only continue to be supported in the 6.1 product.

0 Kudos
astrasel
Beginner
497 Views
Are you saying that SVD won't be available in 7.0 at all, or that we would have to get the 'speech recognition' package to be able to continue to use it?
0 Kudos
PaulF_IntelCorp
Employee
497 Views
All the functions that are part of the "ippsr.h" will not be included. These are the functions that comprise the speech recognition domain.

Are you using just this one function from that domain? We are still in a beta phase on 7.0 and are looking for feedback regarding the changes that have been made. If you could provide a list of the functions you are using we can provide alternatives or consider retaining some key functions.

If you do not wish to share the list publicly then be sure to push the "yes" button next to the "Mark this post private?" item at the bottom of the thread reply editing box, before you push submit.
0 Kudos
astrasel
Beginner
497 Views
Actually, I'm having some basic trouble using this method. In particular, verifying the results by producing an A (using the formulaA= U W VT) that matches the input.

For example, I have a 10x6 input matrix, so my output U will be 10x6 (according to the documentation - while in Matlab it is 10x10, and I think this is source of my confusion and/or error in IPP), W is a vector with 6 elements and V is 6x6 (so VT will be 6x6).

It's not complete clear the size of W in the above equation (A = U W VT) but I'm not sure you can multiply a [10x6] * 'W' * [6x6] and get a 10x6 result.

Is there an example showing that the original input can be produced by the SVD result?

0 Kudos
PaulF_IntelCorp
Employee
497 Views

I'm not aware of any sample for this function, and I'm not expert at this function. According to the documentation:

This function performs Single Value Decomposition (SVD) on the input matrix A. The output matrices U, W, and V meet the following condition:

A = U W VT,

where the matrix U is column-orthogonal, the matrix W is diagonal (stored as a vector), and the matrix V is orthogonal. VT is the transpose of the matrix V.

The function ippsSVDSort transforms output matrices so that elements of the matrix W are sorted in descending order of their absolute values.


One thing that is confusing me is the term "column-orthogonal matrix." I suspect that "column-orthogonal" means the columns of the matrix U all satisfy the conditions of an orthogonal matrix, but the rows do not, and this might then allow for U to be a non-square matrix?

V must be a square matrix. My interpretation is that W is being represented in short-hand notation as a vector, but that it represents a diagonal matrix, which means it must also be square(all the non-diagonal members are zero). This would imply then that U must also be a square matrix of the same size as V, otherwise, as you noted, the matrix arithmetic won't work.

Will make a request to engineering for clarification.
0 Kudos
Vyacheslav_Baranniko
New Contributor II
497 Views
Mathematically, form-by-n matrix A (i.e.m rows, n columns) with requirement forV to ben-by-n square matrix, matrix U must be m-by-m and Wmust be m-by-n (!non-square) matrix.

W isdiagonal, somay berepresented byavector, additionally, in IPPmatrix U is cut tom-by-nmatrix, so as other columns(with index higher than n) just make no difference, and there is a little or no reason to output them. That is why IPP can do in-place SVD, i.e. replacinginput A with output U.

Vyacheslav
IPP
0 Kudos
astrasel
Beginner
497 Views
I think I understand what you are saying, and will try to use the U,W and V produced by SVD to re-create A (the input). It sounds like when I multiply Uby W, I should say that U is really an m-by-m matrix (when the output from SVD is described as being m-by-n).

I think you can see why we are having this discussion however. This interpretation of U is not clear from the current documentation. It would still be nice to have some example (C) code to make things clearer.
0 Kudos
Reply