下面的小助手将把矩阵中的每个索引转换为它的行-列坐标(基于零,如python)
[编辑]
->如果希望行和列索引从一开始,可以执行以下操作:
row, col = convert_to_base1(get_row_col(idx, rows, cols))
以下是代码和测试:
def convert_to_base1(args):
row, col = args
return row + 1, col + 1
def get_row_col(idx, rows, cols):
""" translates a provided index to its row col coordinates
idx: int, the index to translate
rows: int, the number of rows
cols: int, the number of columns
"""
ndx = idx - 1
row = ndx // cols
col = ndx % cols
return row, col
def test_get_row_col():
assert get_row_col(22, 6, 5) == (4, 1)
assert get_row_col(5, 6, 5) == (0, 4)
assert get_row_col(6, 6, 5) == (1, 0)
assert get_row_col(10, 6, 5) == (1, 4)
assert get_row_col(1, 6, 5) == (0, 0)
assert get_row_col(11, 6, 5) == (2, 0)
assert get_row_col(13, 6, 5) == (2, 2)
assert get_row_col(30, 6, 5) == (5, 4)
assert get_row_col(26, 6, 5) == (5, 0)
assert get_row_col(26, 1, 30) == (0, 25)
assert get_row_col(26, 10, 10) == (2, 5)
assert get_row_col(26, 7, 4) == (6, 1)
assert get_row_col(26, 4, 7) == (3, 4)
print('***all test_get_row_col pass***')
def test_get_row_col_convert_to_base1():
assert convert_to_base1(get_row_col(22, 6, 5)) == (5, 2)
assert convert_to_base1(get_row_col(5, 6, 5)) == (1, 5)
assert convert_to_base1(get_row_col(6, 6, 5)) == (2, 1)
assert convert_to_base1(get_row_col(10, 6, 5)) == (2, 5)
assert convert_to_base1(get_row_col(1, 6, 5)) == (1, 1)
assert convert_to_base1(get_row_col(11, 6, 5)) == (3, 1)
assert convert_to_base1(get_row_col(13, 6, 5)) == (3, 3)
assert convert_to_base1(get_row_col(30, 6, 5)) == (6, 5)
assert convert_to_base1(get_row_col(26, 6, 5)) == (6, 1)
assert convert_to_base1(get_row_col(26, 1, 30)) == (1, 26)
assert convert_to_base1(get_row_col(26, 10, 10)) == (3, 6)
assert convert_to_base1(get_row_col(26, 7, 4)) == (7, 2)
assert convert_to_base1(get_row_col(26, 4, 7)) == (4, 5)
print('***all test_get_row_col_convert_to_base1 pass***')
test_get_row_col()
test_get_row_col_convert_to_base1()