【发布时间】:2020-11-18 19:51:45
【问题描述】:
我对 Python 比较陌生,非常感谢您的帮助!
假设我有两个方阵 - 一个大的 M 和一个小的 K - 和一个整数数组索引 ind,不一定排序。 ind 的长度与K 的尺寸相匹配。在 Octave/MATLAB 中,我可以轻松做到这一点:
M(ind, ind) = K
这会将 K 的所有组件分配到与索引 ind 对应的 M 的那些位置。这通常用于有限元计算。
有没有办法在 Python 中优雅地做同样的事情?你可以假设我的 M 和 K 是通过操作构造的 NumPy 数组:
M = np.zeros((12, 12))
K = np.zeros((6, 6))
我在这些矩阵上做了一些工作,并用数据填充了它们。我的ind 数组也是一个 NumPy 数组。
但是,当我做类似的事情时
M[ind, ind] = K
我收到shape mismatch 错误。将ind.tolist() 而不是ind 插入M 不会改变任何东西。
感谢您的建议!
【问题讨论】:
-
在
numpyM[ind, ind]访问“对角线”,而在 MATLAB 中它定义了一个块。M[ind[:,None],ind]获取块,针对行(一维数组)广播列向量。实际上,在 MATLAB 中容易做的事情在numpy中要难一些。但反之亦然; MATLAB 需要一个额外的函数来获取对角线的“平面”索引。
标签: python arrays numpy indexing