问题描述
我正在创建一个 [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 (将#修改为@)