想象一下有一个矩阵数组(nxkxk),如何返回对角线条目,同时使用for循环保持原始形状without.

例如,在不保持原始形状的情况下,我们可以做np.diagonal(array_of_matrices, axis1=1, axis2=2)

显然我可以这样做,然后重建原始形状,但我想知道是否有更干净的方法.

我什么也没try 过,已经没有主意了.np.diag不接受axis个论点.

推荐答案

您可以使用广播将eye矩阵乘以k x n x n形状的数组,以仅返回对角线元素.

import numpy as np

n = 4
k = 3
arr = np.arange(k * n * n).reshape(k, n, n)
diags = arr * np.eye(n)

以下是要素:

arr
# returns:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23],
        [24, 25, 26, 27],
        [28, 29, 30, 31]],

       [[32, 33, 34, 35],
        [36, 37, 38, 39],
        [40, 41, 42, 43],
        [44, 45, 46, 47]]])

diags
# returns:
array([[[ 0.,  0.,  0.,  0.],
        [ 0.,  5.,  0.,  0.],
        [ 0.,  0., 10.,  0.],
        [ 0.,  0.,  0., 15.]],

       [[16.,  0.,  0.,  0.],
        [ 0., 21.,  0.,  0.],
        [ 0.,  0., 26.,  0.],
        [ 0.,  0.,  0., 31.]],

       [[32.,  0.,  0.,  0.],
        [ 0., 37.,  0.,  0.],
        [ 0.,  0., 42.,  0.],
        [ 0.,  0.,  0., 47.]]])

Python相关问答推荐

脚注在Python中使用regex导致错误匹配

Ibis中是否有一个ANY或ANY_UTE表达,可以让我比较子查询返回的一组值中的值?

Numpy索引argsorted使用integer数组,同时保留排序顺序

Python plt.text中重叠,包adjust_text不起作用,如何修复?

计算所有前面行(当前行)中列的值

使用LineConnection动画1D数据

Django管理面板显示字段最大长度而不是字段名称

在Pandas DataFrame操作中用链接替换'方法的更有效方法

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

用合并列替换现有列并重命名

如何使用它?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

多处理队列在与Forking http.server一起使用时随机跳过项目

joblib:无法从父目录的另一个子文件夹加载转储模型

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

Cython无法识别Numpy类型

如何按row_id/row_number过滤数据帧

将一个双框爆炸到另一个双框的范围内

使用Python异步地持久跟踪用户输入

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'