有沒有辦法通過 python numpy 操作來產生以下結果?
輸入一維陣列:
[3, 0, 0, 2, 2, 1]
輸出二維陣列:
3 0 0 2 2 1
0 0 0 2 2 1
0 0 0 2 2 1
2 2 2 2 2 1
2 2 2 2 2 1
1 1 1 1 1 1
uj5u.com熱心網友回復:
除了杰羅米的精彩回答,這里是對無序陣列的支持:
indexes = np.arange(len(arr))
idx = np.maximum(indexes[None,:], indexes[:, None])
arr[idx]
uj5u.com熱心網友回復:
假設輸入陣列始終包含遞增的值,您可以使用np.maximum(arr[None,:], arr[:, None]). 由于 Numpy 廣播,這將計算輸出陣列位置處所有專案的最大值arr[i]和最大值。如果輸入并不總是包含遞增的值,則需要更好地定義輸出。arr[j](i, j)
uj5u.com熱心網友回復:
Adir 的解決方案非常出色,應該被接受。
編輯:原始答案-
您似乎想通過從左上角“旋轉”一個像雨刷片一樣的向量來創建一個矩陣。這會產生這種模式:
def wiper_blade_matrix(x):
n = len(x)
z = np.zeros((n, n), x.dtype)
for k in range(-(n - 1), n):
z[np.where(np.eye(n, k=k))] = x[abs(k):]
return z
用法:
In [4]: wiper_blade_matrix(np.array([0, 0, 0, 1, 1, 2]))
Out[4]:
array([[0, 0, 0, 1, 1, 2],
[0, 0, 0, 1, 1, 2],
[0, 0, 0, 1, 1, 2],
[1, 1, 1, 1, 1, 2],
[1, 1, 1, 1, 1, 2],
[2, 2, 2, 2, 2, 2]])
In [5]: wiper_blade_matrix(np.array([0, 0, 0, 5, 1, 2]))
Out[5]:
array([[0, 0, 0, 5, 1, 2],
[0, 0, 0, 5, 1, 2],
[0, 0, 0, 5, 1, 2],
[5, 5, 5, 5, 1, 2],
[1, 1, 1, 1, 1, 2],
[2, 2, 2, 2, 2, 2]])
In [6]: wiper_blade_matrix(np.array([3, 0, 0, 2, 2, 1]))
Out[6]:
array([[3, 0, 0, 2, 2, 1],
[0, 0, 0, 2, 2, 1],
[0, 0, 0, 2, 2, 1],
[2, 2, 2, 2, 2, 1],
[2, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424192.html
