我想使用 numpy 創建一個漩渦模式,但對這種方法不太確定。
Whirpool 從陣列中心的 0 開始。漩渦的每一層都增加 1。漩渦的最后一層可以有任何數字,但只能在 1 到 10 之間。下圖可能有助于理解:-

我想創建一個函式,在給定最后一層使用的數字的情況下生成這樣的漩渦模式。最后一層漩渦應該只允許 1 到 10(含)之間的數字。這不應該是編碼。
uj5u.com熱心網友回復:
非常簡短:
def whirlpool(n):
center = np.abs(np.arange(-n, n 1))
return np.maximum.outer(center, center)
uj5u.com熱心網友回復:
我冒昧地稱它為洋蔥而不是漩渦,因為這個矩陣具有同心層而不是螺旋結構。
import numpy as np
def makeOnion(final_layer_num):
dim = 2 * final_layer_num 1
matrix = []
for row_num in range(dim):
row = []
for col_num in range(dim):
row_centrality = abs(row_num - final_layer_num)
col_centrality = abs(col_num - final_layer_num)
row.append(max(row_centrality, col_centrality))
matrix.append(row)
return np.array(matrix)
如果您計算行(或列)與中心的“距離”,它將有助于解決這個問題,因此row_centrality和col_centrality。不過,我只是提出了這些條款,也許還有更好的條款。無論如何,矩陣中給定條目的行和列中心性之間的最大值等于它所在的層。
uj5u.com熱心網友回復:
我想出了這個函式,n外層的數字在哪里:
import numpy as np
def whirlpool(n):
m = n*2 1
arr = np.full((m, m), n)
for l in range(1, n 1):
arr[l:m-l, l:m-l] = np.full((m-l*2, m-l*2), n-l)
return arr
whirlpool(3)
出去:
array([[3, 3, 3, 3, 3, 3, 3],
[3, 2, 2, 2, 2, 2, 3],
[3, 2, 1, 1, 1, 2, 3],
[3, 2, 1, 0, 1, 2, 3],
[3, 2, 1, 1, 1, 2, 3],
[3, 2, 2, 2, 2, 2, 3],
[3, 3, 3, 3, 3, 3, 3]])
uj5u.com熱心網友回復:
我只是創建一個用最大值初始化的完整二維陣列(最外層從一開始就“完成”),然后使用回圈遞減每個較低層。這種方式只需要分配一次記憶體。
我做了兩個函式,一個將層數作為輸入,另一個將最大值作為輸入。如您所見,它們之間的轉換非常簡單:
import numpy as np
def createOnionFromNumberOfLayers(layers: int):
dim = layers * 2 - 1
onion = np.full((dim, dim), layers - 1)
for i in range(1, layers):
slice_ = slice(i, dim - i)
onion[slice_, slice_] -= 1
return onion
def createOnionFromMaxValue(maxval: int):
return createOnionFromNumberOfLayers(maxval 1)
if __name__ == '__main__':
onion = createOnionFromNumberOfLayers(3)
print('Given number of layers:\n', onion, '\n')
onion = createOnionFromMaxValue(4)
print('Given max value:\n',onion)
輸出:
Given number of layers:
[[2 2 2 2 2]
[2 1 1 1 2]
[2 1 0 1 2]
[2 1 1 1 2]
[2 2 2 2 2]]
Given max value:
[[4 4 4 4 4 4 4 4 4]
[4 3 3 3 3 3 3 3 4]
[4 3 2 2 2 2 2 3 4]
[4 3 2 1 1 1 2 3 4]
[4 3 2 1 0 1 2 3 4]
[4 3 2 1 1 1 2 3 4]
[4 3 2 2 2 2 2 3 4]
[4 3 3 3 3 3 3 3 4]
[4 4 4 4 4 4 4 4 4]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511153.html
上一篇:如何在do-while中回圈條件
