如何使用numpy.argsort()返回的参数对3d张量进行排序?

时间:2019-05-16 17:54:59

标签: python numpy

我有一个张量,模型,形状为(5,100,200)。就像一个具有5个通道的(100x200)图像。我正在尝试在不使用for循环的情况下实现以下两件事:

  1. 替换

我有另一个形状为(100,200)的图像 I 。我想将 model 的每个像素的通道上最小的像素值替换为 I 的像素。例如:

For pixel (3,5)
model(0,3,5)=128
model(1,3,5)=64
model(2,3,5)=256
model(3,3,5)=0
model(4,3,5)=32

I(3,5)=69

最小值位于第三个通道中,所以我想将 model(3,3,5)(即0)替换为 I(3,5)(即69)。我用

minargs=np.argmin(model,axis=0) 

获得形状(100,200)的矩阵,该矩阵具有对于每个像素具有最小值的通道的通道索引{0,1,2,3,4}。我只是不知道如何使用此矩阵来实现替换(没有for循环)。

  1. 排序

我还有一个大小为(5,100,200)的模型矩阵 kmodel ,我想通过/通过模型通道对像素值进行排序,但要使用kmodel中的值作为键。假设

kmodel(0,3,4)=5
kmodel(1,3,4)=1
kmodel(2,3,4)=3
kmodel(3,3,4)=2
kmodel(4,3,4)=6

model(0,3,4)=9
model(1,3,4)=8
model(2,3,4)=7
model(3,3,4)=6
model(4,3,4)=5

所以排序后,我应该将模型设为:

model(0,3,4)=8 (8 was the value at model(**1**,3,4)and  kmodel has the minimum value ,*1* at channel **1**)
model(1,3,4)=6
model(2,3,4)=7
model(3,3,4)=9
model(4,3,4)=5

我用

numpy.argsort(kmodel,axis=0) 

在张量(5,100,200)中获取参数,但是我也不知道如何使用它们来实现排序(没有循环)。 实现以上目标的最快方法是什么?我也经常使用这些张量(5,100,200)的操作,如加法和exp。还希望提供指向包含有关如何指定numpy数组索引的各种方法的良好教程的资源的链接。

0 个答案:

没有答案