基于numpy 1D数组的2D numpy数组中的智能分配

时间:2019-04-14 05:39:03

标签: python arrays numpy

我有一个numpy 2D数组,我想根据以下逻辑将其转换为-1 \ 1值:

a。找到每一行的argmax()

b。基于该一维数组(a)为其指定的值包含值1

c。基于此一维数组的取反,将值分配为-1

示例:

scipy.stats.binned_statistic

这是我得到的:

arr2D = np.random.randint(10,size=(3,3))
idx = np.argmax(arr2D, axis=1)

arr2D = [[5 4 1]
         [0 9 4]
         [4 2 6]]
idx = [0 1 2]

arr2D[idx] = 1
arr2D[~idx] = -1

在我想要的时候

arr2D = [[-1 -1 -1]
         [-1 -1 -1]
         [-1 -1 -1]]

感谢一些帮助, 谢谢

1 个答案:

答案 0 :(得分:1)

方法1

使用那些argmax-

创建蒙版
mask = idx[:,None] == np.arange(arr2D.shape[1])

然后,使用这些索引,然后使用它来创建1和-1s数组-

out = 2*mask-1

或者,我们可以使用np.where-

out = np.where(mask,1,-1)

方法2

创建蒙版的另一种方法是-

mask = np.zeros(arr2D.shape, dtype=bool)
mask[np.arange(len(idx)),idx] = 1

然后,使用方法#1中列出的一种方法获取out

方法3

另一种方法是这样-

out = np.full(arr2D.shape, -1)
out[np.arange(len(idx)),idx] = 1

或者,我们可以使用np.put_along_axis进行分配-

np.put_along_axis(out,idx[:,None],1,axis=1)