python - 对角阵列上的 numpy 线性代数,没有显式重复

标签 python numpy array-broadcasting

我有一个数组 w (shape (3000, 100, 100)) 我想将它与另一个数组 e (shape (5, 3000)) 使得结果 k 的形状为 (5, 5, 100, 100)

k[:, :, i, j] = e @ np.diag(w[:, i, j]) @ e.T

因为 w 太大了,制作一些形状为 (3000, 3000, 100, 100)super_w 数组是不切实际的,并且显式填充主对角线。遍历 ij 的效率也不是很高。除了将 w 分成 block 之外,是否有一种节省内存的方法来执行此操作?

最佳答案

np.einsum -

k = np.einsum('li,ijk,mi->lmjk',e,w,e)

关于python - 对角阵列上的 numpy 线性代数,没有显式重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357744/

相关文章:

python - 如果满足特定条件,则将字符串与列表列表连接起来

python - Zipkin 用于分析传统程序的内部结构

Python 交换运算符覆盖

python - 查找一个数据框中每行的前 n 个值,并使用这些索引获取另一个数据框中的值以执行成对操作

python - 广播如何用于数字数组和 block 矩阵之间的乘法?

python - 不确定在 Python 中将多个变量传递给 sql 查询的语法是否正确

python - 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

python - 在 PyTorch 张量切片上广播操作的最有效方法是什么?

用列表索引的 Python 数组,但数组维度被置换

python - 错误 - 在 python 中计算 PCA 的欧几里得距离