Редактирование: см. комментарий @ 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.
Этот код работает на 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 элементов из матричного массива