Sea S
sea un vector con elementos únicos, y s
un subconjunto de él, también con elementos únicos; por ejemplo, S={1,2,3,4,5,6}
y s={1,3,4,6}
. Ahora dado otro vector c={7,8,9,7}
, ¿cómo puedo crear un vector C=[7,0,8,9,0,7]
, es decir, si S[[i]]
es un elemento en s
, entonces C[[i]]
es igual al elemento en c
con el mismo índice como S[[i]]
en s
, otro cero.Indización de lista en mathematica
Lo que tengo en este momento se ve como
C=Array[0&,Length[S]];
j=1;
For[i=1,i<=Length[S],i++,If[MemberQ[s,S[[i]]],C[[i]]=c[[j]];j=j+1;]];
Esto funciona, pero viniendo de un fondo de MATLAB, odio for
bucles y la operación anterior es una operación de indexación trivial en MATLAB. Estoy seguro de que hay una manera más inteligente de lograr esto, un estilo la mathematica. ¿Alguien tiene sugerencias?
Esto no está relacionado con las respuestas a continuación, pero 'C = Array [0 & ...]' se expresa mejor como 'C = ConstantArray [0, Longitud [S]] ', y diez veces más rápido para arrancar. –