Подсчет ненулевых элементов в каждой строке и в каждом столбце 2D-массива NumPy

У меня есть матрица NumPy , которая содержит в основном ненулевые значения, но иногда будет содержать нулевое значение. Мне нужно уметь:

  1. Подсчитывать ненулевые значения в каждой строке и помещать это количество в переменную, которую я могу использовать в последующих операциях, возможно, перебирая индексы строк и выполняя вычисления во время итеративного процесса.

  2. Подсчитайте ненулевые значения в каждом столбце и поместите этот счет в переменную, которую я могу использовать в последующих операциях, возможно, путем перебора индексов столбцов и выполнения вычисления во время итеративного процесса.

Например, мне нужно просуммировать каждую строку, а затем разделить сумму каждой строки на количество ненулевых значений в каждой строке, сообщая отдельный результат для каждого индекса строки . Затем мне нужно просуммировать каждый столбец, а затем разделить сумму столбца на количество ненулевых значений в столбце, также сообщая отдельный результат для каждого индекса столбца. Мне нужно делать и другие вещи, но они должны быть легкими после того, как я выясню, как делать то, что я здесь перечисляю.

Код, с которым я работаю, приведен ниже. Вы можете видеть, что я создаю массив нулей, а затем заполняю его из файла csv . Некоторые из строк будут содержать значения для всех столбцов, но в других строках по-прежнему останутся некоторые нули в некоторых из последних столбцов, что создаст проблему, описанную выше.

Последние пять строк приведенного ниже кода взяты из другой публикации на этом форуме. Эти последние пять строк кода возвращают напечатанный список индексов строк / столбцов для нулей. Однако я не знаю, как использовать полученную информацию для создания ненулевых счетчиков строк и ненулевых счетчиков столбцов, описанных выше.

ANOVAInputMatrixValuesArray=zeros([len(TestIDs),9],float)
j=0
for j in range(0,len(TestIDs)):
    TestID=str(TestIDs[j])
    ReadOrWrite='Read'
    fileName=inputFileName
    directory=GetCurrentDirectory(arguments that return correct directory)
    inputfile=open(directory,'r')
    reader=csv.reader(inputfile)
    m=0
    for row in reader:
        if m<9:
            if row[0]!='TestID':
                ANOVAInputMatrixValuesArray[(j-1),m]=row[2]
                m+=1
    inputfile.close()

IndicesOfZeros = indices(ANOVAInputMatrixValuesArray.shape) 
locs = IndicesOfZeros[:,ANOVAInputMatrixValuesArray == 0]
pts = hsplit(locs, len(locs[0]))
for pt in pts:
    print(', '.join(str(p[0]) for p in pt))

Кто-нибудь может мне с этим помочь?

23
задан Pearly Spencer 13 April 2018 в 17:15
поделиться