亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從numpy中的1d向量映射2d延遲向量

從numpy中的1d向量映射2d延遲向量

滄海一幻覺 2021-04-09 14:10:37
我正在嘗試從1D向量生成2D向量,其中元素沿行沿每一行遞增。我希望我的輸入看起來像這樣:input:t = [t1, t2, t3, t4, t5]out = [t5,  0,  0,  0,  0][t4, t5,  0,  0,  0][t3, t4, t5,  0,  0][t2, t3, t4, t5,  0][t1, t2, t3, t4, t5][ 0, t1, t2, t3, t4][ 0,  0, t1, t2, t3][ 0,  0,  0, t1, t2][ 0,  0,  0,  0, t1]我不知道不使用for循環就可以做到這一點的方法,并且計算效率對于使用this進行任務很重要。有沒有辦法做到這一點而無需for循環?這是我的代碼使用for循環:import numpy as npt = np.linspace(-3, 3, 7)z = np.zeros((2*len(t) - 1, len(t)))diag = np.arange(len(t))for index, val in enumerate(np.flip(t, 0)):    z[diag + index, diag] = valprint(z)
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

您在這里要求的就是Toeplitz矩陣,即:


矩陣,其中從左到右的每個下降對角線是恒定的


一個區別是您需要矩陣的下三角形。


您碰巧很幸運,可以使用它scipy.linalg.toeplitz來構建矩陣,然后np.tril訪問下三角形。


import numpy as np

from scipy.linalg import toeplitz


v = np.array([1, 2, 3, 4, 5])

t = np.pad(v[::-1], (0, 4), mode='constant')

求解矩陣并訪問下三角:


np.tril(toeplitz(t, v))

和我們的輸出!


array([[5, 0, 0, 0, 0],

       [4, 5, 0, 0, 0],

       [3, 4, 5, 0, 0],

       [2, 3, 4, 5, 0],

       [1, 2, 3, 4, 5],

       [0, 1, 2, 3, 4],

       [0, 0, 1, 2, 3],

       [0, 0, 0, 1, 2],

       [0, 0, 0, 0, 1]])

要推廣此方法,只需根據t以下形狀計算必要的填充v:


v = # any one dimension array

t = np.pad(v[::-1], (0, v.shape[0]-1), mode='constant')


查看完整回答
反對 回復 2021-04-20
  • 3 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號