import numpy as np
a = np.array([[1, 0, 1],
[2, 3, 4],
[0, 0, 7]])
columns = (a != 0).sum(0)
rows = (a != 0).sum(1)
Переменная (a != 0)
является массивом той же формы, что и исходная a
, и содержит True
для всех ненулевых элементов.
Функция .sum(x)
суммирует элементыпо оси x
.Сумма True/False
элементов - это количество True
элементов.
Переменные columns
и rows
содержат количество ненулевых (элемент! = 0) значений в каждом столбце / строке исходного массива:
columns = np.array([2, 1, 3])
rows = np.array([2, 3, 1])
РЕДАКТИРОВАТЬ : Весь код может выглядеть следующим образом (с несколькими упрощениями в исходном коде):
ANOVAInputMatrixValuesArray = zeros([len(TestIDs), 9], float)
for j, TestID in enumerate(TestIDs):
ReadOrWrite = 'Read'
fileName = inputFileName
directory = GetCurrentDirectory(arguments that return correct directory)
# use directory or filename to get the CSV file?
with open(directory, 'r') as csvfile:
ANOVAInputMatrixValuesArray[j,:] = loadtxt(csvfile, comments='TestId', delimiter=';', usecols=(2,))[:9]
nonZeroCols = (ANOVAInputMatrixValuesArray != 0).sum(0)
nonZeroRows = (ANOVAInputMatrixValuesArray != 0).sum(1)
РЕДАКТИРОВАТЬ 2 :
Чтобы получитьсреднее значение всех столбцов / строк, используйте следующее:
colMean = a.sum(0) / (a != 0).sum(0)
rowMean = a.sum(1) / (a != 0).sum(1)
Что вы хотите сделать, если в столбце / строке нет ненулевых элементов?Затем мы можем адаптировать код для решения такой проблемы.