annotate tvii/transpose.py @ 71:9d55e0299c3f

fix scoping for python 3.6
author Jeff Hammel <k0scist@gmail.com>
date Sun, 17 Dec 2017 13:19:30 -0800
parents 4bf2145c16f8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
67
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 from .unique import unique
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2 from .unique import NotUnique
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 class NotAMatrix(Exception):
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6 """marker exception for matrix conformity"""
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
7
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9 def transpose(A):
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10 """transpose a 2D matrix, `A`"""
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 if not A:
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13 # empty matrix
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14 return A
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16 # Asset that all rows have the same length
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 try:
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 length = unique([len(row) for row in A])
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 except NotUnique as e:
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20 raise NotAMatrix("Multiple number of columns detected: {}".format(sorted(e.multiples)))
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 # perform the transpose
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 transposed = [[None for i in range(len(A))]
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24 for j in range(length)]
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25 for i, row in enumerate(A):
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
26 for j, col in enumerate(row):
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
27 transposed[j][i] = col
4bf2145c16f8 and quick transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
28 return transposed