オブジェクトとしてdtypeを持つnp.arrayがあります。ここでの各要素は、dtypeがfloatで形状が(2,2)のnp.arrayです。数学では、2行2列の行列です。私の目的は、すべてのオブジェクト型要素を浮動小数点型の要素に変換して、1つの2次元行列を得ることです。これは、以下の例によってより良く提示することができます。Python 3では、np.arrayオブジェクト型をfloat型に変換し、オブジェクト要素の変数番号を
dA = 2 # dA is the dimension of the following A, here use 2 as example only
A = np.empty((dA,dA), dtype=object) # A is a np.array with dtype as object
A[0,0] = np.array([[1,1],[1,1]]) # each element in A is a 2-by-2 matrix
A[0,1] = A[0,0]*2
A[1,0] = A[0,0]*3
A[1,1] = A[0,0]*4
私の目的は、1つの行列B(Bの次元は2 * dA×2 * dA)を持つことです。 DAは2に固定されている場合は、物事は、私はハードコード
a00 = A[0,0]
a01 = A[0,1]
a10 = A[1,0]
a11 = A[1,1]
B0 = np.hstack((a00,a01))
B1 = np.hstack((a10,a11))
B = np.vstack((B0,B1))
しかし、現実にすることができるので、より簡単にすることができ数学におけるBの形が
B =
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
する必要があり、DAは変数であり、それは2または任意の他の整数とすることができる。それから私はそれをやる方法を知らない。私はネストされたループが助けることができると思うが、多分あなたは素晴らしいアイデアを持っている。 MATLABにcell2mat関数のようなものがあれば素晴らしいでしょう。ここではA [i、j]をMATLABのセルとして見ることができるからです。
ありがとうございます。
「A」にnumpyオブジェクト配列を使用しているのはなぜですか?私が見ることのできるところから、リストのリスト、あるいは長さが4のリストだけでもうまくいくでしょう。 –
@WarrenWeckesser理由は:私のプログラムでは、 "A"は2本の銅線のシステムの特性行列です。"A"を行列と見なすので、その主対角ブロック "A [0,0]"と "A [1,1]"はそれぞれワイヤ0とワイヤ1の特性です。対角線外のブロックは、これらの2本のワイヤに「A [0,1]」および「A [1,0]」の相互影響を与えます。これらの4つのブロックは個別に計算されます。それらをすべて入手した後、それらを1つの行列 "A"に組み立てたいと思います。行列インデックススタイル "[i、j]"を使用すると、計算プロセス全体をプログラムするのが簡単になり、技術的背景を持つ人々にとって読みやすくなります。 – aura
OK、それは意味があります。その場合、2次元のオブジェクト配列の代わりに、4次元配列 'A = np.empty((dA、dA、2、2))'を使用します。私は可能な限りオブジェクト配列を避けるようにしています。多くの低音と盛り上がりの機能はうまく機能しません。 –