我想有效地創建以下形狀的矩陣,即行號和列號之間的絕對差。例如 5 我應該得到:
0 1 2 3 4
1 0 1 2 3
2 1 0 1 2
3 2 1 0 1
4 3 2 1 0
在 Python 中是否有一種快速/優雅的方法來做到這一點?
uj5u.com熱心網友回復:
您可以使用簡單的嵌套串列推導:
n = 5
[[abs(i-j) for j in range(n)]
for i in range(n)]
輸出:
[[0, 1, 2, 3, 4],
[1, 0, 1, 2, 3],
[2, 1, 0, 1, 2],
[3, 2, 1, 0, 1],
[4, 3, 2, 1, 0]]
或使用 numpy:
import numpy as np
n = 5
a = np.arange(n)
abs(a-a[:,None])
uj5u.com熱心網友回復:
三個輝煌更多:
np.abs(np.diff(np.indices((n, n)), axis=0))
np.abs(n - 1 - np.sum(np.indices((n, n)), axis=0)[::-1])
np.abs(np.subtract.outer(np.arange(n), np.arange(n)))
np.abs我認為使用and有點乏味np.indices。努力做得更好...
np.lib.stride_tricks.sliding_window_view(np.cumsum(np.repeat([n-1, -1, 1], [1, n-1, n-1])), n)[::-1].copy()
完畢!比第一個示例快 4 倍,比第三個示例快 2.3 倍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416468.html
標籤:
上一篇:在行范圍內填充零
