Если бы у вас было равно количество элементов, которые нужно оставить (! = -1 ) в каждой строке, вы могли бы запустить:
np.apply_along_axis(lambda row: row[row != -1], 1, students)
Чтобы проверить в этом варианте установите random_ints = np.array([0,1])
, выберите только указанные выше строки для студентов и запустите указанный выше код.
Но если количество этих элементов отличается , Numpy вызовет исключение:
ValueError: could not broadcast input array from shape (3) into shape (4)
Причина в том, что (в данном случае) в некоторых строках осталось 4 элементов, а в других - только 3 .
К сожалению, Numpy не поддерживает «зубчатые» массивы (с разным количеством элементов в каждой строке).
Можно получите что-то вроде , которое вы хотели, но в виде вложенного списка (не массива Numpy):
result = []
for row in students:
result.append(row[row != -1].tolist())
Результат ( для строк 2 и 1 ) это:
[[0, 90, 85, 100], [100, 90, 80]]