使用 dtype=Objects 构建和拆分二维数组

问题描述

我正在创建一个 [NBxNB] 阶矩阵,其中每个元素都是另一个 [3x3] 阶矩阵,并且这些矩阵中的所有元素都是复数。 这些 [3x3] 矩阵由一些 FOR 循环构建,并且必须位于 [NBxNB] 矩阵上的特定位置。在所有 [3x3] 都正确定位后, 我需要转换单个 [3NBx3NB] 矩阵上的块,评估逆矩阵并将逆 [3NBx3NB] 矩阵划分为具有 [3x3] 子矩阵的相同 [NBxNB] 结构。

我需要这个除法,因为我希望能够单独选择子矩阵以在求逆后执行一些计算。

构建矩阵和逆的主要过程如下所示,一些零数据只是为了举例说明代码

#This is the function to divide the inverse in blocks - Got here on StackOverflow but don't remeber from which post...
def blockshaped(arr,nrows,ncols):
    h,w = arr.shape
    assert h % nrows == 0,"{} rows is not evenly divisble by {}".format(h,nrows)
    assert w % ncols == 0,"{} cols is not evenly divisble by {}".format(w,ncols)
    return (arr.reshape(h//nrows,-1,ncols)
               .swapaxes(1,2)
               .reshape(-1,ncols))

Y = np.zeros([NB,NB],dtype=object)

for i in range(NB):
    for j in range(NB):
        Y[i][j] = np.zeros([3,3])
        Y[j][i] = np.zeros([3,3])
        
AUX = np.zeros(NB,dtype=object)
for i in range(NB):
    AUX[i] = np.vstack(Y[:,i]).astype(complex)

T = np.hstack(AUX).astype(complex) 
X = np.linalg.inv(T)
Z = blockshaped(X,3,3)  
    

这段代码运行良好,但我想知道是否有更“pythonic 的方式”来这样做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)