NumPy数组索引4D数组

时间:2016-01-05 02:49:20

标签: python arrays numpy vectorization

我有一个4D阵列' a'大小(2,3,4,4)填充零。

class CSession
{
    public:
        CSession() {};
        ~CSession() {};
        CSession(const CSession& rhs) {};
    private:
        long m_lUSN;
};

class CTest
{
    public:
        CSession* m_pObj;
        CSession& GetSesstion1() { m_pObj = NULL; return *m_pObj; }
        CSession GetSesstion2(); { m_pObj = NULL; return *m_pObj; }
};

我还有一个3D阵列' b'大小(2,3,4)带有一些索引值(全部在0到3之间)。

我想要做的是替换' a'中的每个最后一个数组的元素。 (' a')的第四个维度,对应于' b'中的索引,为1。

我可以使用3 for循环执行此操作,如下所示:

int _tmain(int argc, _TCHAR* argv[])
{
    CTest test;
    CSession Session2 = test.GetSesstion1();
    CSession Session3 = test.GetSesstion2();
    return 0;
};

但我想知道无论如何我都可以避免循环。类似于:

import numpy as np
a = np.zeros((2,3,4,4))

1 个答案:

答案 0 :(得分:5)

是的,您可以以矢量化形式执行此操作:

p,m,n,r = a.shape
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1

这应该更容易推广到更高阶的ndarray。