检查二维数组中每行中不同列索引的值

2024-10-02 14:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些二进制2D numpy数组(prediction)类似于:

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

2D数组中的每一行都是一个句子作为特定类别的分类,2D数组中的每一列对应于该句子的类别分类。例如,类别(categories数组)是['A','B','C','D','E','F']。在

我有另一个2D数组(catIndex),它包含要在每一行中检查的值的索引,例如

^{pr2}$

对于上面的4个实例。在

我现在要做的是遍历二进制2D数组,对于为每个句子指定的列索引,检查它是1还是0,然后将相应的类别追加到一个新数组(catResult = [])。如果它是0,我会将"no_region"追加到新数组中。在

例如,在句子1中,我查看句子的索引0,并检查它是0还是{}。它是一个1,所以我将'A'追加到我的新数组中。在第2句中,我查看句子的索引4,发现它是一个0,所以我将"no_region"追加到数组中。在

当前代码:

for index in catIndex:
        for i,sentence in enumerate(prediction):
            for j,binaryLabel in enumerate(sentence):
                if prediction[i][index]==1:
                    catResult.append(categories[index])
                else:
                    catResult.append("no_region")

Tags: noinforindex二进制分类数组类别
2条回答

制作二维阵列:

In [54]: M=[[1,0,1,0,1,1],[0,0,1,0,0,1],[1,1,1,1,1,0],[1,1,0,0,1,1]]
In [55]: M=np.array(M)

列索引,其中ind,行索引为[0,1,2,3]:

^{pr2}$

{cd1>带标签的{cd1}:

In [59]: lbl=np.array(list('ABCDEF'),dtype=object)    
In [60]: res=lbl[ind]
In [61]: res
Out[61]: array(['A', 'E', 'F', 'C'], dtype=object)

使用where来确定是使用该映射值,还是使用某个None。使用object数据类型可以很容易地将字符串标签替换为其他内容,None或{},等等

In [62]: np.where(m, res, None)
Out[62]: array(['A', None, None, None], dtype=object)

按照这些思路,应该可以有效地实现这一点,尽管目前还无法进行测试:

rows = len(prediction)
p = prediction[np.arange(rows), catIndex.flatten()]
catResult = np.empty(rows, 'S1').fill('n')
catResult[p] = categories[catIndex.flatten()][p]

相关问题 更多 >