比方說你有apxq numpy的2D陣列A,這裏是與(P,Q)作爲樣品(3,4):
In []: A = np.arange(1,13).reshape(4,3)
In []: A
Out[]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
Step 1:
要插入對角線零,它需要製作一個新的形狀爲px q + 1的二維數組。
在此之前,我們創建與非對角線元素的列索引值的2D陣列的新的二維陣列是這樣
In []: columnIndexArray = np.delete(np.meshgrid(np.arange(q+1), np.arange(p))[0], np.arange(0, p * (q+1), q+2)).reshape(p,q)
的輸出上述將如下所示:
In []: columnIndexArray
Out[]:
array([[1, 2, 3],
[0, 2, 3],
[0, 1, 3],
[0, 1, 2]])
Step 2:
現在構造PX q + 1個2d中的零的這樣
陣列
In []: B = np.zeros((p,q+1))
In []: B
Out[]:
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
Step 3:
現在從A
In []: B[np.arange(p)[:,None], columnIndexArray] = A
In []: B
Out[]:
array([[ 0., 1., 2., 3.],
[ 4., 0., 5., 6.],
[ 7., 8., 0., 9.],
[ 10., 11., 12., 0.]])
Note:
分配與所述值的非對角元素要使代碼動態與A.shape [0]和q與A.shape替換p [1]。
形狀總是'(4,3)'?有什麼限制嗎?如果您嘗試在形狀爲((3,4))的陣列中插入對角線,您想要什麼? – mgilson
原始形狀總是像這樣(n + 1,n),其中n> 0,但我更喜歡如果答案也適用於(n,n)。 –
我會創建一個新的數組(零),並使用'np.tri ...'函數將舊數組的上下三角形複製到新數組中。 – hpaulj