Извините за название, я бы искал предложение, если у кого-то есть лучшее описание.Мне нужна функция (максимально быстрая), которая получает ненулевые записи и заполняет новый массив упорядоченной версией предыдущего массива.Это, вероятно, яснее из приведенного ниже примера:
Массив ввода
np.random.seed(2)
a = np.random.randint(0,10,10)
b = np.random.randint(0,10,10)
c = np.random.randint(0,10,10)
a = 0 * (a % 2) + (1-(a % 2))*a
b = 0 * (b % 2) + (1-(b % 2))*b
c = 0 * (c % 2) + (1-(c % 2))*c
arr = np.array([a,b,c])
arr
>>> array([[8, 8, 6, 2, 8, 0, 2, 0, 0, 4],
[4, 0, 0, 0, 6, 4, 0, 0, 6, 0],
[0, 0, 8, 4, 6, 0, 0, 2, 0, 4]])
Массив вывода
outArr = np.empty_like(arr)
outArr[0,:] = (arr[0,:] > 0) * arr[0,:] + ~(arr[0,:] > 0) * (arr[1,:] > 0) * arr[1,:] + ~(arr[0,:] > 0) * ~(arr[1,:] > 0) * arr[2,:]
outArr[1,:] = (arr[0,:] > 0) * arr[1,:] + (arr[0,:] > 0) * ~(arr[1,:] > 0) * arr[2,:]
outArr[2,:] = (arr[0,:] > 0) * (arr[1,:] > 0) * arr[2,:]
outArr
>>> array([[8, 8, 6, 2, 8, 4, 2, 2, 6, 4],
[4, 0, 8, 4, 6, 0, 0, 0, 0, 4],
[0, 0, 0, 0, 6, 0, 0, 0, 0, 0]])
ГдеЯ жестко запрограммировал этот массив только в 3 строки, чтобы я мог вручную ввести функцию, в действительности это может быть больше строк (порядка десятков, ничего особенного).
РЕДАКТИРОВАТЬ:
Размеры, которые я на самом деле хотел бы использовать, - это 5 строк по 100-150 тыс. Столбцов
Тип данных всегда будет целым числом
Наконец, процесс обновления - это Iдобавить новую строку внизу, выровнять вверх, а затем удалить все конечные строки только с 0 (нулевые значения)