Я пишу короткий сценарий, чтобы определить среднее число перестановок, необходимых для произвольно выбранного элемента из матрицы 3x7 для перемещения в «центральное» (1,3) положение, как показано ниже:
import numpy as np
import random as rand
cards = np.arange(1,22)
choice = rand.choice(cards)
print choice
block = np.split(cards, 3)
print block
count = 0
while block[1][3] != choice:
i,j = np.where(block==choice)
print np.where(block==choice)
block[i[0]], block[1] = block[1], block[i[0]]
print block
cards = np.concatenate((block[0],block[1],block[2]))
print cards
block = np.transpose(np.split(cards, 7))
print block
count += 1
print count
К сожалению, я сталкиваюсь с контрольно-пропускным пунктом после 2-3 циклов, когда подрешетка, содержащая выбранное число, удаляется и заменяется центральной / 2-й во время замены (строка 18). Например:
tcb-MacBook:3x7cards TCB$ python 3x7.py
1
[array([1, 2, 3, 4, 5, 6, 7]), array([ 8, 9, 10, 11, 12, 13, 14]), array([15, 16, 17, 18, 19, 20, 21])]
(array([0]), array([0]))
[array([ 8, 9, 10, 11, 12, 13, 14]), array([1, 2, 3, 4, 5, 6, 7]), array([15, 16, 17, 18, 19, 20, 21])]
[ 8 9 10 11 12 13 14 1 2 3 4 5 6 7 15 16 17 18 19 20 21]
[[ 8 11 14 3 6 16 19]
[ 9 12 1 4 7 17 20]
[10 13 2 5 15 18 21]]
1
(array([1]), array([2]))
[[ 8 11 14 3 6 16 19]
[ 9 12 1 4 7 17 20]
[10 13 2 5 15 18 21]]
[ 8 11 14 3 6 16 19 9 12 1 4 7 17 20 10 13 2 5 15 18 21]
[[ 8 3 19 1 17 13 15]
[11 6 9 4 20 2 18]
[14 16 12 7 10 5 21]]
2
(array([0]), array([3]))
[[11 6 9 4 20 2 18]
[11 6 9 4 20 2 18]
[14 16 12 7 10 5 21]]
[11 6 9 4 20 2 18 11 6 9 4 20 2 18 14 16 12 7 10 5 21]
[[11 4 18 9 2 16 10]
[ 6 20 11 4 18 12 5]
[ 9 2 6 20 14 7 21]]
3
(array([], dtype=int64), array([], dtype=int64))
Traceback (most recent call last):
File "3x7.py", line 22, in <module>
block[i[0]], block[1] = block[1], block[i[0]]
IndexError: index 0 is out of bounds for axis 0 with size 0
Я понимаю, что и где происходит, но понятия не имею, почему. Есть мысли?