Удаление данных из numpy.array
У меня есть ранг-1 numpy.array, из которого я хочу сделать boxplot. Тем не менее, я хочу исключить все значения, равные нулю в массиве... В настоящее время я решил это путем циклизации массива и копирования значения в новый массив, если он не равен нулю. Однако, поскольку массив состоит из 86 000 000 значений, и я должен делать это несколько раз, это требует большого терпения.
Есть ли более разумный способ сделать это?
Ответы
Ответ 1
это случай, когда вы хотите использовать маскированные массивы, он сохраняет форму вашего массива и автоматически распознается всеми функциями numpy и matplotlib.
X = np.random.randn(1e3, 5)
X[np.abs(X)< .1]= 0 # some zeros
X = np.ma.masked_equal(X,0)
plt.boxplot(X) #masked values are not plotted
#other functionalities of masked arrays
X.compressed() # get normal array with masked values removed
X.mask # get a boolean array of the mask
X.mean() # it automatically discards masked values
Ответ 2
Для массива NumPy a
вы можете использовать
a[a != 0]
чтобы извлечь значения, не равные нулю.
Ответ 3
Я хотел бы предложить вам просто использовать NaN
для таких случаев, где вы хотите проигнорировать некоторые значения, но все же хотите сохранить статистическую статистику как можно более значимой. Так
In []: X= randn(1e3, 5)
In []: X[abs(X)< .1]= NaN
In []: isnan(X).sum(0)
Out[: array([82, 84, 71, 81, 73])
In []: boxplot(X)
![enter image description here]()