将numpy数组转换为布尔数组,指示子数组的最大值

92dk7w1h  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(157)

假设我有一个维度为(N*J)x M的矩阵A,其中每一列由长度为J的$N$个子向量组成。现在,对于这些子向量中的每一个,我想找到最大值的位置,然后生成相同维度的矩阵B,只要A中的相应元素是相应子向量的最大值,矩阵B就为1。假设每个子向量的最大值是唯一的(值是从连续随机变量中提取的)。
简单示例(N=2,J=2,M=2):

A = 
[1, 0;
 2, 4;
 9, 3;
 7, 8]

B = 
[0, 0;
 1, 1;
 1, 0;
 0, 1]

任何帮助赞赏,谢谢!
我没有一个好的开始,我的第一个猜测是使用np的组合。分割成子向量,然后取argmax,并将所有内容转换回布尔数组。

2w2cym1i

2w2cym1i1#

一种方法是将原始形状转换为(J, N*M)形状的数组:

import numpy as np

J = 2  # size of each subvector
A = np.array([[1, 0], [2, 4], [9, 3], [7, 8]])

# Make an array where each column is a length-J subvector
# order='F' means we fill column by column
subvecs = np.reshape(A, (J, -1), order='F')

# Flag elements equal to subvector max as 1, else 0
maxes = np.max(subvecs, axis=0)
is_max = np.equal(subvecs, maxes).astype(int)

# Reshape back to the original array
B = np.reshape(is_max, A.shape, order='F')
print(B)

给出:

[[0 0]
 [1 1]
 [1 0]
 [0 1]]

相关问题