Convert matrix rows into variables

Can anyone show me how to set all matrix rows to variables. For example, I have matrix w={{1,2,3},{3,2,1},{0,0,0}} and I need to set each matrix row to be separate variable that contains the row number of matrix w in its name.

For example, t1={1,2,3} t2={3,2,1} t3={{0,0,0}. Simply it could be done by writing t1=w[] ..., but i have 40 matrices with 200 rows so i need someone to help me do this more efficiently. Variables represents weights in constrained optimization. Thanks in advance.

• I have been using Mathematica for a long time, and in my experience what you are asking for indicates a need to re-think your programming strategy. In every situation I can think of, the rows of a matrix of any size can be accessed without assigning each row to a named variable. – m_goldberg Oct 2 '14 at 9:11
• Thanks for comment. I need these rows as variables because i will use them as a vectors in separate optimization problems,and 3 other expressions which analytics should be provide. – Branimir Oct 2 '14 at 9:29

Perhaps this will work for you. Given a symbol, say t, and a matrix, say m, it will define a set of indexed variables t, t, ..., t[n], bound to the respective rows of m.

SetAttributes[assign, HoldFirst];
assign[name_Symbol, matrix_List] := (
Clear @ name;
Do[t[i] = matrix[[i]], {i, 1, Length@matrix}]
)

Generate some data.

SeedRandom;
m = RandomInteger[99, {5, 4}];
{
{54, 66, 4, 15},
{6, 3, 95, 32},
{48, 3, 81, 87},
{22, 88, 98, 48},
{44, 36, 71, 46}
}

Test

assign[t, m]
DownValues[t]
{
HoldPattern[t] :> {54, 66, 4, 15},
HoldPattern[t] :> {6, 3, 95, 32},
HoldPattern[t] :> {48, 3, 81, 87},
HoldPattern[t] :> {22, 88, 98, 48},
HoldPattern[t] :> {44, 36, 71, 46}
}

The code as below can achieve the result that you need.

Clear@t;
mat = RandomInteger[{1, 10}, {20, 4}];
Evaluate[t /@ Range[Length@mat]] = mat

Because of (=)Set has the attribute HoldFirst, I use the function Evaluate to evaluate first before proceeding with Set.