как удалить столбцы из коллекции ndarrays, которые соответствуют нулевым элементам одного из массивов? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть некоторые данные в 3 массивах с формами:

docLengths.shape = (10000,)
docIds.shape = (10000,)
docCounts.shape = (68,10000)

Я хочу получить относительные значения и их средние значения, а также стандартные отклонения для некоторых значений i:

docRelCounts = docCounts/docLengths
relCountMeans = docRelCounts[i,:].mean()
relCountDeviations = docRelCounts[i,:].std()

Проблема в том, что некоторые элементы docLengths равны нулю. Это приводит к появлению элементов NaN в docRelCounts, поэтому средние значения и отклонения также являются NaN.

Мне нужно удалить данные для документов нулевой длины. Я мог бы написать цикл, находя документы нулевой длины и удаляя их, но я надеялся на некоторую магию с массивными массивами, которая сделает это более эффективно. Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 апреля 2011

Попробуйте это:

docRelCounts = docCounts/docLengths

goodDocRelCounts = docRelCounts[i,:][np.invert(np.isnan(docRelCounts[i,:]))]
relCountMeans = goodDocRelCounts.mean()
relCountDeviations = goodDocRelCounts.std()

np.isnan возвращает массив такой же формы с True, где исходный массив NaN, False в другом месте. И np.invert инвертирует это, и тогда вы получите goodDocRelCounts только со значениями, которые не NaN.

0 голосов
/ 10 мая 2011

В конце концов, я сделал это (на самом деле, я разобрался с этим, прежде чем увидел ответ eumiro - это немного проще, но в остальном не лучше, просто по-другому, поэтому я решил добавить его):

goodData = docLengths!=0  # find zero elements
docLen = docLen[goodData]
docCounts = docCounts[:,goodData]

docRelCounts = docCounts/docLen
means = map(lambda x:x.mean(), docRelCounts)
stds = map(lambda x:x.std(), docRelCounts)
0 голосов
/ 15 апреля 2011

Используйте nanmean и nanstd из scipy.stats:

from scipy.stats import nanmean, nanstd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...