Как получить индексы N максимальных значений в массиве NumPy?

Редактирование: см. комментарий @ dave_thompson_085 о ProcessBuilder, так как это почти наверняка лучший подход.

Еще один ответ упоминал, что вы запускаете tput cols в скрипте перед началом вашей команды. Но если вы хотите запустить его после того, как Java уже запущена, используя Runtime.getRuntime().exec(), вы обнаружите, что tput не может разговаривать с вашим терминалом, потому что Java перенаправляет stdout и stderr. В качестве обходного решения, не используемого для всех, вы можете использовать магическое устройство /dev/tty, которое относится к терминалу текущего процесса. Это позволяет вам запускать что-то вроде этого:

Process p = Runtime.getRuntime().exec(new String[] {
    "bash", "-c", "tput cols 2> /dev/tty" });
// Read the output of this process to get your terminal width

Это работает для меня в Linux, но я бы не ожидал, что он будет работать повсюду. Он, надеюсь, будет работать на Mac. Это определенно не будет работать в Windows, хотя это может быть с Cygwin.

385
задан kmario23 27 February 2019 в 00:49
поделиться

1 ответ

Этот код работает на numpy матричный массив:

mat = np.array([[1, 3], [2, 5]]) # numpy matrix

n = 2  # n
n_largest_mat = np.sort(mat, axis=None)[-n:] # n_largest 
tf_n_largest = np.zeros((2,2), dtype=bool) # all false matrix
for x in n_largest_mat: 
  tf_n_largest = (tf_n_largest) | (mat == x) # true-false  

n_largest_elems = mat[tf_n_largest] # true-false indexing 

Это производит истинную ложь n_largest индексирование матриц, которое также работает для извлечения n_largest элементов из матричного массива

0
ответ дан 22 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: