Re: How to use Thread when second argument to function is a list
- To: mathgroup at smc.vnet.net
- Subject: [mg86442] Re: How to use Thread when second argument to function is a list
- From: Bill Rowe <readnewsciv at sbcglobal.net>
- Date: Tue, 11 Mar 2008 03:00:41 -0500 (EST)
On 3/10/08 at 2:04 AM, petsie at dordos.net (Peter Pein) wrote: >Nasser Abbasi schrieb: >>I have a function which I want to call repeatedly for all rows of a >>matrix to find non-zero elements in each row. This function takes >>as input the row number and the matrix itself and returns a list >>that contain the non-zero elements in the that row. >this is a task for Map: >In[1]:= findNonZeroElements[row_, p_] := >Select[p[[row]], #1 != 0 & ] >mchain[p_] := >(findNonZeroElements[#1, p] & ) /@ Length[p]] >p = {{1, 0, 0, 0, 0}, >{0, 0.2, 0.8, 0, 0}, {0, 0.7, 0.3, 0, 0}, {0.1, 0, 0.1, 0.4, 0.4}, >{0, 0.1, 0.3, 0.2, 0.4}}; >mchain[p] Out[4]= {{1}, {0.2, 0.8}, {0.7, 0.3}, >{0.1, 0.1, 0.4, 0.4}, {0.1, 0.3, 0.2, 0.4}} >or simply: >Clear[mchain] mchain[m_]:=MSelect[#, # != 0 &] & /@ m Another approach would be to use SparseArray. p = SparseArray[{{1, 0, 0, 0, 0}, {0, 0.2, 0.8, 0, 0}, {0, 0.7, 0.3, 0, 0}, {0.1, 0, 0.1, 0.4, 0.4}, {0, 0.1, 0.3, 0.2, 0.4}}]; then all the non-zero elements can be obtained with Most[ArrayRules[p]] /. HoldPattern[_ -> a_] :> a {1,0.2,0.8,0.7,0.3,0.1,0.1,0.4,0.4,0.1,0.3,0.2,0.4} or for a particular row say row 2 Cases[ArrayRules[p], HoldPattern[{2, _} -> _]] /. HoldPattern[_ -> b_] :> b {0.2,0.8} -- To reply via email subtract one hundred and four