我有一个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]]
感谢一些帮助, 谢谢
答案 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)