示例数据:
import numpy as np
a1 = np.array(([2, 4, 6],
[1, 5, 3],
[7, 9, 8]))
输出结果:
np.array([[1, 2, 3],
[8, 9, 4],
[7, 6, 5]])
或者
import numpy as np
a2 = np.array(([2, 4, 6],
[1, 5, 3],
[7, 9, 8],
[12, 11, 10]))
输出结果:
np.array([[1, 2, 3],
[10, 11, 4],
[9, 12, 5],
[8, 7, 6]])
1、使用numpy.rot90()方法实现
import numpy as np
a1 = np.array(([2, 4, 6],
[1, 5, 3],
[7, 9, 8]))
def rotate(matrix, arr):
if not len(matrix):
return
matrix[0] = arr[:len(matrix[0])]
rotate(np.rot90(matrix[1:]), arr[len(matrix[0]):])
a1 = np.array(([2, 4, 6],
[1, 5, 3],
[7, 9, 8]))
sorted_arr = sorted(a1.ravel())
rotate(a1, sorted_arr)
print(a1)
输出结果:
[[1 2 3]
[8 9 4]
[7 6 5]]
2、使用yield和while循环实现
import numpy as np
def spiral_coords(w, h):
maxx = w - 1
maxy = h - 1
minx = miny = 0
while (minx, miny) != (maxx, maxy):
for x in range(minx, maxx): # right
yield (x, miny)
yield (maxx, miny) # upper-right corner
for y in range(miny + 1, maxy): # down
yield (maxx, y)
yield (maxx, maxy) # lower-right corner
for x in range(maxx - 1, minx, -1): # left
yield (x, maxy)
yield (minx, maxy) # lower-left corner
for y in range(maxy - 1, miny, -1): # up
yield (minx, y)
minx += 1
miny += 1
maxx -= 1
maxy -= 1
yield (minx, miny) # final point
def clockwise_sorted(a):
a = a.T
nr, nc = a.shape
sa = a.ravel()
sa.sort()
res = np.zeros_like(a)
for (x, y), v in zip(spiral_coords(nr, nc), sa):
res[x, y] = v
return res.T
a2 = np.array(
[
[2, 4, 6],
[1, 5, 3],
[7, 9, 8],
[12, 11, 10],
]
)
print(a2)
print(clockwise_sorted(a2))
输出结果:
[[ 1 2 3]
[10 11 4]
[ 9 12 5]
[ 8 7 6]]