からマトリックスを展開します。あなたは、サイズの各部分行列D(2×2)のための行列の別のセットを作成する方法numpyの:効率的寸法の正方形アレイD(4×4)指定された部分行列
array([[ 1, 2, 5, 6],
[ 3, 4, 7, 8],
[ 9, 10, 13, 14],
[11, 12, 15, 16]])
D *、私はそのようなことを、*、D ** Dのうち、別の正方形アレイを構築したいな
D* = [...,
[[ 1, 2, 1, 2],
[ 3, 4, 3, 4],
[ 1, 2, 1, 2],
[ 3, 4, 3, 4]]
]
こと:
D** = [[ 1, 2, 1, 2, 5, 6, 5, 6],
[ 3, 4, 3, 4, 7, 8, 7, 8],
[ 1, 2, 1, 2, 5, 6, 5, 6],
[ 3, 4, 3, 4, 7, 8, 7, 8],
[ 9, 10, 9, 10, 13, 14, 13, 14],
[ 11, 12, 11, 12, 15, 16, 15, 16],
[ 9, 10, 9, 10, 13, 14, 13, 14],
[ 11, 12, 11, 12, 15, 16, 15, 16]]]
私の実際のstarti行列Dの次元は184x184なので、forループはこれを達成するには遅すぎることがわかりました。これはnumpyにとって計算量が多すぎますか?それとも効率的にこれをエレガントに達成する方法はありますか?ここ
はfoorループの擬似コードの例である:
segments = [(0,0), (2,2), (0,2), (2, 0)]
for seg in segments:
actual_seg = D[seg[0]:seg[0]+2, seg[1]:seg[1]+2]
D*.append(numpy.kron(numpy.ones((2, 2), dtype=int), actual_seg))
この単純な例では、** D *とDにDをもたらす数学的機能を理解するのに十分ではありません。あなたはD *とD **をどのように作成するかを正式化できますか?たぶんあなたの4-forループコードを含めるかもしれない –
だから、D *は "それぞれ*重複しない*サブマトリックス2を2でタイルしてリストを作る"ことを意味し、D **は "D *のこれらのマトリックスをすべて1つの大きなマトリックス"?これは、あなたの望むことですか? – Kh40tiK