<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Le 05/12/2018 à 13:01, Jens Simon Strom
a écrit :<br>
</div>
<blockquote cite="mid:5C07BE16.5080504@hslmg.de" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
Hallo Scilab experts,<br>
Given is a numeric vector x of length n and an index vector i
with max(i)=n. I want to insert a %nan after every x(i).<br>
<br>
Example <br>
x=[11:20] <br>
i=[2 5 8] <br>
Required result: y=[11 12 %nan 13 14 15 %nan 16 17 18 %nan 19 20]<br>
<br>
How would you proceed so that it works fast for n>500000 too.<br>
</blockquote>
<br>
The following code does it:<br>
<br>
<pre style="font-family:Monospaced;font-style:normal;font-size:12.0;"><span style="color:rgb(0,0,0);">x</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">11</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(188,143,143);">20</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">i</span> <span style="color:rgb(92,92,92);">= </span><span style="color:rgb(74,85,219);">[</span><span style="color:rgb(188,143,143);">2</span> <span style="color:rgb(188,143,143);">5</span> <span style="color:rgb(188,143,143);">8</span><span style="color:rgb(74,85,219);">]</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(100,174,100);font-style:italic;">// [11 12 13 14 15 16 17 18 19 20]</span>
<span style="color:rgb(100,174,100);font-style:italic;">//Required result: y=[11 12 %nan 13 14 15 %nan 16 17 18 %nan 19 20]</span>
<span style="color:rgb(0,0,0);">nx</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">size</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">x</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(188,143,143);">*</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">ni</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">size</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(188,143,143);">*</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">o</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">ones</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(0,0,0);">nx</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">o</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(74,85,219);">)</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">2</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">newx</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">zeros</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(0,0,0);">nx</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(0,0,0);">ni</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">newx</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(50,185,185);">cumsum</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">o</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">x</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">newx</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(0,0,0);">ni</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(218,112,214);">%nan
<font color="#000000">--> newx(i+(1:ni)) = %nan
newx =
11. 12. Nan 13. 14. 15. Nan 16. 17. 18. Nan 19. 20.
</font></span>
</pre>
Regards<br>
Samuel<br>
<span style="color:rgb(218,112,214);"><font color="#000000"><br>
</font></span>
</body>
</html>