       Re: Partition a list based on columns

• To: mathgroup at smc.vnet.net
• Subject: [mg119681] Re: Partition a list based on columns
• From: Heike Gramberg <heike.gramberg at gmail.com>
• Date: Fri, 17 Jun 2011 00:09:24 -0400 (EDT)
• References: <201106160802.EAA13329@smc.vnet.net>

```For the first part of your question you could use

Transpose[Partition[Sort[Flatten[{{3,1},{2,4}}]]],2]]

For the second part you could do something like

diag[list_, k_, l_] :=
With[{order = Flatten[Table[{i, j - i + 1}, {j, 1, k + l - 1}, {i, Max[j + 1 - l, 1], Min[j, k]}], 1]},
ReplacePart[ConstantArray[0, {k, l}], Thread[order -> PadRight[list, k l]]]]

then diag[list,k,l] would order list into a k-by-l matrix in a diagonal way
(truncating or extending list if necessary), so for example

diag[Range, 3, 4]

gives

{{1, 2, 4, 7}, {3, 5, 8, 10}, {6, 9, 11, 12}}

Heike.

On 16 Jun 2011, at 09:02, StatsMath wrote:

> Hi All,
>
> I am looking for help in partition a list based on columns. For ex,
> given a list {{3,1},{2,4}}, I want to sort it and then partition it
> along columns.
>
> So for the given example, I want the answer to be, {{1,3},{2,4}}.
>
> Right now If I try, Partition[Sort[Flatten[{{3,1},{2,4}}]]],2], I get
> {{1,2},{3,4}}.
>
> Looking at doc for Partition[], it doesn't seem to support aligning
> rows on columns. I can do it in a For[] loop, but that seems un-
> mathematica like, is there a good functional way to do this??
>
> ------------
>
> What would be a good way to line up elements in a list in a diagonal
> fashion, for ex: from Range want to create the follwing matrix:
>
> 1 2 4
> 3 5 7
> 6 8 9
>
> Thanks in advance!
>

```

• Prev by Date: Re: Using Parallelize with my own function
• Next by Date: Stumped on debugging what is causing Dynamic to re-evaluate.
• Previous by thread: Partition a list based on columns
• Next by thread: Re: Partition a list based on columns