Skip to content

Commit

Permalink
Updated [] for SGMatrix and made it used by DR preprocessors
Browse files Browse the repository at this point in the history
  • Loading branch information
lisitsyn committed Sep 25, 2011
1 parent 2642355 commit 16e761a
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/shogun/lib/DataType.h
Expand Up @@ -329,15 +329,15 @@ template<class T> class SGMatrix
*/
inline const T& operator[](index_t index) const
{
return matrix+index;
return matrix[index];
}

/** operator overload for matrix r/w access
* @param index to access
*/
inline T& operator[](index_t index)
{
return matrix+index;
return matrix[index];
}

public:
Expand Down
2 changes: 1 addition & 1 deletion src/shogun/preprocessor/Isomap.cpp
Expand Up @@ -148,7 +148,7 @@ SGMatrix<float64_t> CIsomap::isomap_distance(SGMatrix<float64_t> D_matrix)
{
// insert distances to heap
for (j=0; j<N; j++)
heap->insert(j,D_matrix.matrix[i*N+j]);
heap->insert(j,D_matrix[i*N+j]);

// extract nearest neighbor: the jth object itself
heap->extract_min(tmp);
Expand Down
2 changes: 1 addition & 1 deletion src/shogun/preprocessor/KernelLocallyLinearEmbedding.cpp
Expand Up @@ -264,7 +264,7 @@ SGMatrix<float64_t> CKernelLocallyLinearEmbedding::apply_to_feature_matrix(CFeat
delete nz_idxs[i];
for (j=0; j<i; j++)
{
M_matrix.matrix[i*N+j] = M_matrix.matrix[j*N+i];
M_matrix[i*N+j] = M_matrix[j*N+i];
}
}
SG_FREE(nz_idxs);
Expand Down
4 changes: 2 additions & 2 deletions src/shogun/preprocessor/LaplacianEigenmaps.cpp
Expand Up @@ -177,9 +177,9 @@ SGMatrix<float64_t> CLaplacianEigenmaps::apply_to_feature_matrix(CFeatures* feat
for (j=0; j<N; j++)
{
#ifdef HAVE_ARPACK
new_features.matrix[j*m_target_dim+i] = W_matrix[j*(m_target_dim+1)+i+1];
new_features[j*m_target_dim+i] = W_matrix[j*(m_target_dim+1)+i+1];
#else
new_features.matrix[j*m_target_dim+i] = W_matrix[(i+1)*N+j];
new_features[j*m_target_dim+i] = W_matrix[(i+1)*N+j];
#endif
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/shogun/preprocessor/LocallyLinearEmbedding.cpp
Expand Up @@ -18,6 +18,7 @@
#include <shogun/base/DynArray.h>
#include <shogun/mathematics/Math.h>
#include <shogun/io/SGIO.h>
#include <shogun/lib/Time.h>
#include <shogun/distance/Distance.h>
#include <shogun/lib/Signal.h>

Expand Down Expand Up @@ -290,7 +291,7 @@ SGMatrix<float64_t> CLocallyLinearEmbedding::apply_to_feature_matrix(CFeatures*
delete nz_idxs[i];
for (j=0; j<i; j++)
{
M_matrix.matrix[i*N+j] = M_matrix.matrix[j*N+i];
M_matrix[i*N+j] = M_matrix[j*N+i];
}
}
SG_FREE(nz_idxs);
Expand Down Expand Up @@ -356,7 +357,7 @@ SGMatrix<float64_t> CLocallyLinearEmbedding::find_null_space(SGMatrix<float64_t>
for (i=0; i<dimension; i++)
{
for (j=0; j<N; j++)
null_space_features[j*dimension+i] = matrix.matrix[j*(dimension+1)+i+1];
null_space_features[j*dimension+i] = matrix[j*(dimension+1)+i+1];
}
}
else
Expand Down Expand Up @@ -452,6 +453,7 @@ void* CLocallyLinearEmbedding::run_linearreconstruction_thread(void* p)

SGMatrix<int32_t> CLocallyLinearEmbedding::get_neighborhood_matrix(SGMatrix<float64_t> distance_matrix)
{
CTime* time = new CTime(true);
int32_t t;
int32_t N = distance_matrix.num_rows;
// init matrix and heap to be used
Expand Down Expand Up @@ -506,6 +508,9 @@ SGMatrix<int32_t> CLocallyLinearEmbedding::get_neighborhood_matrix(SGMatrix<floa
delete heaps[t];
SG_FREE(heaps);

SG_PRINT("NEIGHBORS TOOK %fs", time->cur_time_diff());
delete time;

return SGMatrix<int32_t>(neighborhood_matrix,m_k,N);
}

Expand Down
18 changes: 9 additions & 9 deletions src/shogun/preprocessor/MultidimensionalScaling.cpp
Expand Up @@ -155,19 +155,19 @@ SGMatrix<float64_t> CMultidimensionalScaling::classic_embedding(SGMatrix<float64
{
for (j=i; j<N; j++)
{
dsq = CMath::sq(distance_matrix.matrix[i*N+j]);
distance_matrix.matrix[i*N+j] = dsq;
distance_matrix.matrix[j*N+i] = dsq;
dsq = CMath::sq(distance_matrix[i*N+j]);
distance_matrix[i*N+j] = dsq;
distance_matrix[j*N+i] = dsq;
}
}
CMath::center_matrix(distance_matrix.matrix,N,N);
for (i=0; i<N; i++)
{
distance_matrix.matrix[i*N+i] *= -0.5;
distance_matrix[i*N+i] *= -0.5;
for (j=i+1; j<N; j++)
{
distance_matrix.matrix[i*N+j] *= -0.5;
distance_matrix.matrix[j*N+i] *= -0.5;
distance_matrix[i*N+j] *= -0.5;
distance_matrix[j*N+i] *= -0.5;
}
}

Expand Down Expand Up @@ -287,7 +287,7 @@ SGMatrix<float64_t> CMultidimensionalScaling::landmark_embedding(SGMatrix<float6
{
for (j=0; j<lmk_N; j++)
lmk_dist_matrix[i*lmk_N+j] =
distance_matrix.matrix[lmk_idxs.vector[i]*total_N+lmk_idxs.vector[j]];
distance_matrix[lmk_idxs.vector[i]*total_N+lmk_idxs.vector[j]];
}

// get landmarks embedding
Expand All @@ -313,15 +313,15 @@ SGMatrix<float64_t> CMultidimensionalScaling::landmark_embedding(SGMatrix<float6
{
for (j=0; j<m_target_dim; j++)
new_feature_matrix[lmk_idxs.vector[i]*m_target_dim+j] =
lmk_feature_matrix.matrix[i*m_target_dim+j];
lmk_feature_matrix[i*m_target_dim+j];
}

// get exactly defined pseudoinverse of landmarks feature matrix
ASSERT(m_eigenvalues.vector && m_eigenvalues.vlen == m_target_dim);
for (i=0; i<lmk_N; i++)
{
for (j=0; j<m_target_dim; j++)
lmk_feature_matrix.matrix[i*m_target_dim+j] /= m_eigenvalues.vector[j];
lmk_feature_matrix[i*m_target_dim+j] /= m_eigenvalues.vector[j];
}


Expand Down

0 comments on commit 16e761a

Please sign in to comment.