У меня есть массив numpy, и я хочу извлечь из него некоторые значения. Это мой массив:
arr= array([[0, 0, 23, 28],
[0, 19, 24, 29],
[0, 20, 25, 30],
[17, 21, 26, 31],
[18, 22, 27, 32]])
Я хочу сначала отсортировать ненулевую часть и изменить ее на:
arr= array([[0, 0, 27, 32],
[0, 22, 26, 31],
[0, 21, 25, 30],
[18, 20, 24, 29],
[17, 19, 23, 28]])
Затем из первого столбца я хочу извлечь две последние строки (18 и 17). Во втором столбце у меня четыре ненулевые единицы: это означает еще 2 ненулевых строки по сравнению с предыдущим столбцом. Итак, я хочу два верхних ряда. В третьем столбце я вижу пять ненулевых строк, что на одну строку больше, чем во второй строке, поэтому мне нужна одна строка. В последнем столбце разница его ненулевых строк с предыдущим равна нулю, поэтому я не хочу из него ни одной строки. Окончательно. Я хочу, чтобы эти извлеченные числа были в виде списка или массива numpy:
result= [17, 18, 21, 22, 27]
Я пробовал следующее, но это было успешно:
result=[]
for m in range (len (arr[0,:])):
for i in range (len (arr[:,m])):
if arr[i,m]==0 and arr[i+1,m]!=0:
b= arr[i+1:,m]
result.append (b)
Я ценю любую помощь заранее.
Давай попробуем:
mask = arr != 0
# mask the 0 with infinity and sort
new_arr = np.sort(np.where(mask, arr, np.inf), axis=0)
# replace back:
arr[:] = np.where(mask, new_arr[::-1], 0)
# extract the result
result = arr[np.arange(arr.shape[0]),mask.argmax(axis=1)]