[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