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

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

如何根據規則從較小的矩陣創建較大的矩陣

如何根據規則從較小的矩陣創建較大的矩陣

白衣染霜花 2022-11-29 17:09:06
我有一個矩陣,比如 3 x 3x= np.arange(0,9,1).reshape((3,3))我想根據以下簡單規則構建更大的矩陣 (9x9):新矩陣的前三行是相同的,從第一行 x 和零到末尾。后三行是相同的,由 x 的第二行開始,由三個 0 組成,然后是 x,然后是 0,直到行尾,依此類推。像這樣的東西。0 1 2 0 0 0 0 0 00 1 2 0 0 0 0 0 00 1 2 0 0 0 0 0 00 0 0 3 4 5 0 0 00 0 0 3 4 5 0 0 00 0 0 3 4 5 0 0 00 0 0 0 0 0 6 7 8  0 0 0 0 0 0 6 7 80 0 0 0 0 0 6 7 8有沒有辦法以 pythonic 方式做到這一點?我試圖通過使用 numpy.kron / numpy.repeat 來查看是否,但我認為這不是方法。特別是我首先想到的是得到一個矩陣 9*3x=np.repeat(x,3)然后嘗試使用 np.kron 用零完成它,但它沒有用。
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以使用scipy.linalg中的 block_diag。

"""

>>> print(answer)

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

 [0 1 2 0 0 0 0 0 0]

 [0 1 2 0 0 0 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 0 0 0 6 7 8]

 [0 0 0 0 0 0 6 7 8]

 [0 0 0 0 0 0 6 7 8]]

"""

from scipy.linalg import block_diag

import numpy as np


x = np.arange(9).reshape(3, 3)

answer = block_diag(*np.array_split(x.repeat(3, axis=0), 3))


查看完整回答
反對 回復 2022-11-29
?
紅糖糍粑

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

不確定它是如何 pythonic 但我的想法是使用列表理解來遍歷每一行并根據更改的參數對其進行 np.pad :


import numpy as np


x = np.arange(0,9,1).reshape((3,3))


a = x.shape[1]  # length of original rows | you can hardcode to 3

b = x.shape[0]*a - a  # number of cells you will pad each row with | you can hardcode it to 6

repeat = 3 # how many times each row should be repeated


x_padded = [np.pad(row, (i*a, b-i*a)) for i, row in enumerate(x)]

x_out = np.repeat(x_padded, repeat, axis=0)

print(x_out)

輸出:


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

 [0 1 2 0 0 0 0 0 0]

 [0 1 2 0 0 0 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 3 4 5 0 0 0]

 [0 0 0 0 0 0 6 7 8]

 [0 0 0 0 0 0 6 7 8]

 [0 0 0 0 0 0 6 7 8]]


查看完整回答
反對 回復 2022-11-29
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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