#python #arrays #numpy #tuples
#python #массивы #numpy #кортежи
Вопрос:
Я хочу разделить 2D массив на основе значения в строке 13. Входные данные представляют собой 2D массив Numpy, но я не могу понять, как создавать массивы в качестве выходных данных, поскольку np.append выдает мне тупики. (Так что я могу, например, не использовать np.median для него)
import numpy as np
D = np.load('train_data.npy')
E = []
F = []
for i, item in enumerate(D):
if D[i][13]==0:
np.append(E,item)
else:
np.append(F,item)
threshold=np.median(E[:, 7])
#Throws error, because E is a now tuple. It works on D.
Комментарии:
1.
np.append
это не что иное, как метод добавления списка. Не пытайтесь его использовать.
Ответ №1:
Векторизованная версия приведенного выше кода.
import numpy as np
E = D[np.isclose(D[:,13], 0)].ravel().tolist()
F = D[~np.isclose(D[:,13], 0)].ravel().tolist()
При работе с числами с плавающей запятой лучше использовать почти равное сравнение, потому что в некоторых случаях (из-за ошибок представления чисел в памяти), например, 1.0e-20 может рассматриваться как не равный нулю.
Комментарии:
1. Это все еще имеет кортеж в качестве выходных данных. Как я могу заставить его снова создать 2D массив?
2. Просто не применяйте
.ravel
и.tolist
, оставьте только: D[np.isclose(D[:,13], 0)]