我有一个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))
答案 0 :(得分:5)
是的,您可以以矢量化形式执行此操作:
p,m,n,r = a.shape
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1
这应该更容易推广到更高阶的ndarray。