- are outside the standard deviation (using bsxfun indeed) AND
- correspond to true in the logical array
Subscript indices must either be real positive integers or logicals in bsxfun
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Matthew Zelko
el 19 de En. de 2016
Comentada: Guillaume
el 19 de En. de 2016
Hi there,
Had a look at various others posts that include this error message but cannot find what is missing from my code. Feel like I am brute forcing this by as it stands I have
T 19081 x 22 double % Raw Data values
StdTimedEdit 1 x 22 double % Standard Deviation values for each column
MeanTimedEdit 1 x 22 double % Means for each column
StDIndexFull 19081 x 22 logical % Logical Index for which values I want to run the bxs function on
I am trying to do run a bxsfun to replace values outside 2 standard deviations from the mean for each column with 'NaN', but only on the values that equal 1 in the logical StDIndexFull. Currently it looks as such:
T(bsxfun(@lt, T(T(StdIndexFull)), (MeanTimedEdit + 2*StDsTimedEdit)) ...
& bsxfun(@gt, T(T(StdIndexFull)), (MeanTimedEdit - 2*StDsTimedEdit)))= NaN;
This returns the following error:
Subscript indices must either be real positive integers or logicals.
Any assistance or opinions would be muchly appreciated
Matt
0 comentarios
Respuesta aceptada
Guillaume
el 19 de En. de 2016
Editada: Guillaume
el 19 de En. de 2016
As Star said, one of your problem is the use of T to index into itself. That makes no sense, I'm not sure what you intended with that.
In addition, your logic has gone a bit wrong on where to use the logical array. You want to find the values that:
This is written as:
(bsxfun(@lt, T, MeanTimedEdit - 2*StDsTimedEdit) | bsxfun(@gt, T, MeanTimedEdit + 2*StDsTimedEdit)) ... %part 1
& StdIndexFull %part 2
So the replacing is written as:
T((bsxfun(@lt, T, MeanTimedEdit - 2*StDsTimedEdit) | bsxfun(@gt, T, MeanTimedEdit + 2*StDsTimedEdit)) & StdIndexFull) = nan;
2 comentarios
Guillaume
el 19 de En. de 2016
Sorry about the typo, now fixed.
No, bsxfun is not using the index as a stand alone criteria. What is happening is that the two bsxfun are generating a logical array telling you which number is outside the standard deviation (step 1). It does not use your index array at all. That step 1 logical array is then combined with your index logical array using normal boolean operation.
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!