簡體   English   中英

numpy.sum 有條件的

[英]numpy.sum with conditional

在以下代碼中:

def compute_class_freqs():
    """
    Compute positive and negative frequences for each class.

    Returns:
        positive_frequencies (np.array): array of positive frequences for each
                                         class, size (num_classes)
        negative_frequencies (np.array): array of negative frequences for each
                                         class, size (num_classes)
    """
    ### START CODE HERE (REPLACE INSTANCES OF 'None' with your code) ###
    labels = [[0,1,0],[1,1,1],[0,1,1]]
    print(labels)
    # total number of patients (rows)
    N = labels[0]
    
    positive_frequencies = None
    negative_frequencies = None

    ### END CODE HERE ###
    return positive_frequencies, negative_frequencies

我想將每行中 1 的數量相加並將每個和附加到 positive_frequencies,並將每行中 0 的數量相加並將每個和附加到negative_frequencies。 如何使用 numpy 函數 numpy.sum() 和 numpy.where() 來做到這一點?

編輯:positive_frequencies 應該是每列中 1 的數量除以總行數,負頻率應該是每列中 0 的數量除以總行數。 基本上,該函數應該返回 numpy 浮點數組。

我認為這可能有效,我知道您的評論中已經有了答案,而且這不使用 np.sum 或 np.where,但我想我會分享沒有 numpy 的情況下我將如何做到這一點:

labels = [[0,1,0],[1,1,1],[0,1,1]]

positive_frequencies = [len([num for num in listOfNums if num == 1])/len(listOfNums) for listOfNums in labels]
negative_frequencies = [len([num for num in listOfNums if num == 0])/len(listOfNums) for listOfNums in labels]

print(positive_frequencies, negative_frequencies)

這讓我得到了以下輸出:

[1, 3, 2] [2, 0, 1]

但是,如果你想要一個 numpy 數組,你可以試試這個:

import numpy as np

labels = [[0,1,0],[1,1,1],[0,1,1]]

positive_frequencies = np.fromiter([len([num for num in listOfNums if num == 1])/len(listOfNums)  for listOfNums in labels], dtype=np.float16)
negative_frequencies = np.fromiter([len([num for num in listOfNums if num == 0])/len(listOfNums)  for listOfNums in labels], dtype=np.float16)

print(positive_frequencies, negative_frequencies)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM