Разделить 2D массив numpy с условием

#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)]