<div>What does the winner of this logical contest win? ;-)</div>
<div> </div>
<div>Anyway, I have an exact and an approximate solution (if the only problem is to avoid loops!):</div>
<div> </div>
<div>- first problem: </div>
<div>--> A((jj-1)*size(A,1)+ii) = 5</div>
<div> </div>
<div>- second problem:</div>
<div>--> B= matrix(A,-1,1)</div>
<div>--> C=matrix(B,-1,1) .*. ones(1,size(v,2)) - ones(size(C,1),1) .*. v</div>
<div>--> D=C(:,2:$) <0 & C(:,1:$-1) >=0</div>
<div>--> [f1,f2]=find(D)</div>
<div> </div>
<div>which provides the result you want (although presented slightly diffrently, but I do not know if it makes a difference for your uses).</div>
<div> </div>
<div>Eric.<br><br> </div>
<div><span class="gmail_quote">2008/4/7, harishankar ramachandran <<a href="mailto:hsr@ee.iitm.ac.in">hsr@ee.iitm.ac.in</a>>:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi all,<br><br>If I have a matrix "A", and I apply a condition on it, I can extract the<br>indices for which the condition is true, and I can then use that vector to<br>
change those values. For eg:<br><br>indx=find(A>4);<br>A(indx)=5;<br><br>There is also a double index version of find, where I can get the (i,j)<br>coordinates of the points. However, I do not seem to be able to use the<br>
following code:<br><br>[ii,jj]=find(A>4);<br>A(ii,jj)=5;<br><br>This instead assigns 5 to a submatrix of A defined by rows ii and columns jj.<br><br>What is the proper way to vectorially assign values to elements of a matrix A,<br>
if I have the element locations in the form [ii,jj]? Without a for loop, that<br>is.<br><br>Another question: Suppose I have a set of disjoint conditions with which I<br>wish to partition a matrix. How do I extract the corresponding elements with<br>
a single command? This seems like a very useful capability, but I don't find<br>anyway to do this without using a for loop. Eg:<br><br>A=int(rand(5,5)*12);<br>v=0:2:12;<br>l=list()<br>for k=1:length(v)-1<br>l(k)=find(A>=v(k) & A<v(k+1));<br>
end<br><br>This yields:<br>A =<br><br> 2. 7. 6. 2. 3.<br> 9. 10. 7. 2. 11.<br> 0. 8. 8. 2. 2.<br> 3. 10. 2. 10. 3.<br> 7. 0. 6. 7. 4.<br><br>l =<br>
l(1) = 3. 10.<br> l(2) = 1. 4. 14. 16. 17. 18. 21. 23. 24.<br> l(3) = 25.<br> l(4) = 5. 6. 11. 12. 15. 20.<br> l(5) = 2. 8. 13.<br> l(6) = 7. 9. 19. 22.<br>
<br>But can I do it faster, without for loops? I would like to have a command that<br>does:<br><br>A=int(rand(5,5)*12);<br>v=0:2:12;<br>l=findmany(A>=v(1:$-1) & A<v(2:$));<br><br>or something like that. Is there some such thing?<br>
<br>Thanks in advance<br><br>hari ramachandran<br>--<br>Dr. Hari Ramachandran, EE Dept, IIT-Madras<br></blockquote></div><br>