Convert Logical into Sequential Index Vector
92 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
John R.
el 2 de Feb. de 2016
Movida: Star Strider
el 29 de En. de 2023
Hello,
I am looking for a simple way to convert a logical vector in a sequential vector of doubles whose values are the indices of true in the logical vector. For example, let's say x is a 1x8 logical vector:
x = [0 1 0 0 1 1 1 0]
The result I am looking for would be y:
y = [2 5 6 7]
I know this can be done with a for loop, but was curious if there is a clever one-liner.
Thank you.
0 comentarios
Respuesta aceptada
Star Strider
el 2 de Feb. de 2016
Us e the find function:
x = [0 1 0 0 1 1 1 0];
y = find(x)
y =
2 5 6 7
2 comentarios
Gabor
el 25 de Jun. de 2021
Movida: Star Strider
el 29 de En. de 2023
Hi,
What if we want to do the exact opposite?
We have y = [2 5 6 7] and we want to create x = [0 1 0 0 1 1 1] without loop?
x(ismember(1:max(y),y))=true
than we get our logical vector array without loop from a list of indexes
x =
1×7 logical array
0 1 0 0 1 1 1
I hope it helps someone, it took me sometime to figure this out.
Keywords: create logical vector from array of indexes, from index array, from idx, from vector of indexes.
Star Strider
el 25 de Jun. de 2021
Movida: Star Strider
el 29 de En. de 2023
That can be significantly simplified:
y = [2 5 6 7]
x(y) = true
If ‘x’ is already longer than 7 elements (for example to reconstitute the original 8-element vector):
x = zeros(1,8)
x(y) = true
.
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!