如果我有陣列 [[1,0,0],[0,1,0],[0,0,1]](我們稱之為 So),它是作為 numpy.eye(3) 完成的。我怎樣才能得到對角線下方的元素只有 2 和 3 像這樣 [[1,0,0],[2,1,0],[3,2,1]] ?? 如何將陣列的向量分配給不同的值集?
我知道我可以使用 numpy.concatenate 來連接 3 個向量,我知道如何更改行/列,但我不知道如何更改主對角線下方的對角線。
我試圖做 np.diagonal(So,-1)=2*np.diagonal(So,-1) 來改變主對角線正下方的對角線,但它出現“無法分配給函式呼叫”。
任何幫助,將不勝感激 :)
uj5u.com熱心網友回復:
我不會從開始numpy.eye,而是numpy.ones和使用numpy.tril cumsum來計算的下三角的下一個數字:
import numpy as np
np.tril(np.ones((3,3))).cumsum(axis=0).astype(int)
輸出:
array([[1, 0, 0],
[2, 1, 0],
[3, 2, 1]])
反向輸出(來自評論)
假設陣列是正方形
n = 3
a = np.tril(np.ones((n,n)))
(a*(n 2)-np.eye(n)*n-a.cumsum(axis=0)).astype(int)
輸出:
array([[1, 0, 0],
[3, 1, 0],
[2, 3, 1]])
輸出n=5:
array([[1, 0, 0, 0, 0],
[5, 1, 0, 0, 0],
[4, 5, 1, 0, 0],
[3, 4, 5, 1, 0],
[2, 3, 4, 5, 1]])
uj5u.com熱心網友回復:
您可以使用np.fill_diagonal矩陣并為其編制索引,這樣矩陣的主對角線就是您想要的。假設您想放置 2 和 3 以外的其他值是一個很好的解決方案:
import numpy as np
q = np.eye(3)
#if you want the first diagonal below the principal
# you can call q[1:,:] (this is not a 3x3 or 2x3 matrix but it'll work)
val =2
np.fill_diagonal(q[1:,:], val)
#note that here you can use an unique value 'val' or
# an array with values of corresponding size
#np.fill_diagonal(q[1:,:], [2, 2])
#then you can do the same on the last one column
np.fill_diagonal(q[2:,:], 3)
uj5u.com熱心網友回復:
你可以按照這種方法:
def func(n):
... return np.array([np.array(list(range(i, 0, -1)) [0,] * (n - i)) for i in range(1, n 1)])
func(3)
輸出
array([[1, 0, 0],
[2, 1, 0],
[3, 2, 1]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/396613.html
下一篇:二維陣列所有元素的所有組合
