Numpy:有效地对M的子矩阵m求和

时间:2016-10-25 06:31:08

标签: python numpy matrix

如果我知道每个方形子矩阵m(2x2)的维数,并且大方矩阵M的维数可以被维数m整除:M modulo m == 0.

是否有一种有效的方法来总结以下矩阵M:

<xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="data">
        <link ref="{xyz:get-booklink(.)}">
            <xsl:value-of select="xyz:get-book-name(.)"/>
        </link>
    </xsl:template>


    <xsl:function name="xyz:get-book-name">
        <xsl:param name="node"/>

        <xsl:sequence select="$node/(/)/doc/books/name"/>
    </xsl:function>


    <xsl:function name="xyz:get-booklink">
        <xsl:param name="node"/>

        <xsl:sequence select="$node/(/)/doc/link/booklink"/>
    </xsl:function>

结果如下:

<doc>
    <link ref="abc.com def.com">abc def</link>
    <books>
        <booklink>abc</name>
        <name>def</name>
    </books>
    <link>
        <booklink>abc.com</booklink>
        <booklink>def.com</booklink>
    </link>
</doc>

M&#39;中的(0,0) M是(0,0),(0,1),(1,0),(1,1)的总和?

我发现for循环在这里非常慢。

1 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案。

import numpy as np
import itertools

>>> x = np.arange(16).reshape((4,4))
>>> x
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> for i, j in itertools.product([0,2],[0,2]):
...     print np.sum(x[i:i+2,j:j+2])
... 
10
18
42
50
>>> 

找到了一个优雅的解决方案here

>>> x.reshape(2,2,2,2).sum(axis=(1,3))
array([[10, 18],
       [42, 50]])
>>>