[Scilab-Dev] Question about sparse(ij,v,mn) internals

Stéphane Mottelet stephane.mottelet at utc.fr
Tue May 12 12:16:53 CEST 2015


I a very interested about the source, because I have tried on my own 
(see the attached file) by I have discovered that getSparseMatrix only 
gives a copy of the non zeros values but not just the pointer to the array.

S.

Le 12/05/2015 12:01, Samuel Gougeon a écrit :
> Le 12/05/2015 11:56, Samuel Gougeon a écrit :
>> Le 12/05/2015 11:09, Stéphane Mottelet a écrit :
>>> Le 12/05/2015 10:30, Samuel Gougeon a écrit :
>>>>
>>>>> OK. So, unless i misunderstand you, this syntax is used only to 
>>>>> update values at their current positions, not to set new positions 
>>>>> or modify ones.
>>> exactly !
>>
>> Stephane,
>> Could you report your wish on bugzilla? The patch to do S.nzval=v is 
>> ready. I will post it on your report, with updated help pages.
> Here is a sample:
>
> -->sp0 = sprand(5,4,0.4); v = grand(1,nnz(sp0),"uin",0,10); sp = sp0;
>
> -->sp.nzval = v;
>
> -->full(sp0), v, full(sp),sp
>  ans  =
>
>     0.3439298    0.           0.0811258    0.9293860
>     0.           0.7802274    0.3794188    0.
>     0.6256186    0.           0.           0.4584969
>     0.           0.6692851    0.           0.
>     0.8157691    0.           0.           0.7757127
>  v  =
>
>     5.    9.    6.    0.    10.    5.    4.    0.    9.    3.
>  ans  =
>
>     5.    0.     5.    0.
>     0.    0.     4.    0.
>     9.    0.     0.    9.
>     0.    10.    0.    0.
>     6.    0.     0.    3.
>  sp  =
>
> (    5,    4) sparse matrix
>
> (    1,    1)        5.
> (    1,    3)        5.
> (    2,    3)        4.
> (    3,    1)        9.
> (    3,    4)        9.
> (    4,    2)        10.
> (    5,    1)        6.
> (    5,    4)        3.
>
>
>
> _______________________________________________
> dev mailing list
> dev at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/dev


-- 
Département de Génie Informatique
EA 4297 Transformations Intégrées de la Matière Renouvelable
Université de Technologie de Compiègne -  CS 60319
60203 Compiègne cedex

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/dev/attachments/20150512/f85f66e1/attachment.htm>
-------------- next part --------------
/* ==================================================================== */
/* Template toolbox_skeleton */
/* This file is released under the 3-clause BSD license. See COPYING-BSD. */
/* ==================================================================== */
#include "api_scilab.h"
#include "Scierror.h"
#include "MALLOC.h"
#include <localization.h>
#include "api_scilab.h"

#define MIN(x, y) (((x) < (y)) ? (x) : (y))

int sparse_set(char *fname,unsigned long fname_len)
{
	SciErr sciErr;
	int i,j,k;
	int* piAddr			= NULL;
    int* vAddr          = NULL;
	int iRows			= 0;
	int iCols			= 0;
	int viRows			= 0;
	int viCols			= 0;
	int iNbItem			= 0;
	int* piNbItemRow	= NULL;
	int* piColPos		= NULL;
	double* pdblReal	= NULL;	
    double* vpdblReal	= NULL;
	double* pdblImg		= NULL;

    CheckInputArgument(pvApiCtx, 2, 2);

	sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
	if(sciErr.iErr)
	{
		printError(&sciErr, 0);
		return 0;
	}
	sciErr = getSparseMatrix(pvApiCtx, piAddr, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal);
	if(sciErr.iErr)
	{
		printError(&sciErr, 0);
		return 0;
	}

	sciErr = getVarAddressFromPosition(pvApiCtx, 2, &vAddr);
	if(sciErr.iErr)
	{
		printError(&sciErr, 0);
		return 0;
	}

	sciErr = getMatrixOfDouble(pvApiCtx, vAddr, &viRows, &viCols, &vpdblReal);
	if(sciErr.iErr)
	{
		printError(&sciErr, 0);
		return 0;
	}

	
    for(i = 0 ; i < MIN(viRows*viCols,iNbItem) ; i++)
	{
		pdblReal[i]=vpdblReal[i];
	}

	//assign allocated variables to Lhs position
	// AssignOutputVariable(pvApiCtx, 1) = 0;
	return 0;
}


More information about the dev mailing list