让S是具有独特的元件的载体,并且s它的一个子集,还具有独特的元件; 例如,S={1,2,3,4,5,6}和s={1,3,4,6}.现在给出的另一种载体c={7,8,9,7},我怎么可以创建一个矢量C=[7,0,8,9,0,7],也就是说,如果S[[i]]是在一个元素s,那么C[[i]]等于元素c与相同的索引S[[i]]中s,否则为零.
我现在看起来像
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;]];
Run Code Online (Sandbox Code Playgroud)
这是有效的,但是来自MATLAB背景,我讨厌for循环,上面的操作是matlab中一个简单的索引操作.我确信有一种更聪明的方法来实现这一目标,这是一种数学风格.有没有人有建议?
您正在使用c或0中的元素替换S的元素,因此:
ss = {1, 2, 3, 4, 5, 6}
s = {1, 3, 4, 6}
c = {7, 8, 9, 7}
r = Append[MapThread[Rule, {s, c}], Rule[_, 0]]
answer = Map[Replace[#, r] &, ss]
Run Code Online (Sandbox Code Playgroud)
这比迄今为止发布的速度要快:
ss = {1, 2, 3, 4, 5, 6}; s = {1, 3, 4, 6}; c = {7, 8, 9, 7};
Replace[ss, Dispatch@Append[Thread[s -> c], _ -> 0], 1]
Run Code Online (Sandbox Code Playgroud)