我想从3D矩阵中获取一维索引数据。
例如,给定x = np.random.randint(10, size=(10,3,3))
,我想像np.argmax(x, axis=(1,2))
一样做np.max
之类的事情,就像获得一个长度为10的一维数组一样大小为(3,3)
的每个子矩阵的最大值的索引(0到8)。
到目前为止,我还没有找到任何有用的东西,我想避免在第一维上循环(并使用np.argmax(x)
),因为它非常大。
干杯!
答案 0 :(得分:1)
重塑以合并最后两个轴,然后使用 while(fscanf(f, "%c", &str) == 1)
{
//while((str=getchar()) != ',')
if( str==',')
{
printf(" ");
}
else
{
printf("%c",str);
}
}
-
np.argmax
示例运行 -
idx = x.reshape(x.shape[0],-1).argmax(-1)
out = np.unravel_index(idx, x.shape[-2:])
如果你的意思是获得合并索引,那么它更简单 -
In [263]: x = np.random.randint(10, size=(4,3,3))
In [264]: x
Out[264]:
array([[[0, 9, 2],
[7, 7, 8],
[2, 5, 9]],
[[1, 7, 2],
[8, 9, 0],
[2, 8, 3]],
[[7, 5, 0],
[7, 1, 6],
[5, 1, 1]],
[[0, 7, 3],
[5, 4, 1],
[9, 8, 9]]])
In [265]: idx = x.reshape(x.shape[0],-1).argmax(-1)
In [266]: np.unravel_index(idx, x.shape[-2:])
Out[266]: (array([0, 1, 0, 2]), array([1, 1, 0, 0]))
示例运行 -
x.reshape(x.shape[0],-1).argmax(1)