将函数应用于w.r.t的numpy矩阵的每一行。它的索引

时间:2017-11-05 13:01:19

标签: python numpy matrix

我有一个numpy矩阵 A 的形状[n,m]和一个长度为n的数组 b 。我需要的是获取 A 的第i行的 b [i]最少元素的总和。 所以代码可能如下所示:

        import { autoinject, inject, NewInstance } from "aurelia-framework";
        import { LoggedInService } from "../components/auth/LoggedInService";
        import { bindable } from "aurelia-templating";

        @autoinject
        @bindable
        export class Navmenu {
            private testAuthentication: LoggedInService;
            @bindable public loggedIn: boolean = this.testAuthentication.isAuthenticated();

            constructor(testAuthentication: LoggedInService) {
                this.testAuthentication = testAuthentication;
                this.loggedIn = this.testAuthentication.isAuthenticated();

            }

        }

我考虑过np.apply_along_axis()函数,但在这种情况下,你的函数似乎只能依赖于行本身。

1 个答案:

答案 0 :(得分:5)

矢量化方法利用NumPy broadcasting在每行创建有效的掩码,然后执行sum-reduction -

mask = b[:,None] > np.arange(A.shape[1])
out = (A*mask).sum(1)

或者,使用np.einsum获取reduction -

out = np.einsum('ij,ij->i',A,mask)

我们也可以使用np.matmul/@ notation on Python 3.x -

out = (A[:,None] @ mask[...,None]).squeeze()