При использовании MySQL можно использовать
SELECT GREATEST(col1, col2 ...) FROM table
Я решил сравнить время выполнения разных подходов, упомянутых здесь. Я пользовался своей библиотекой simple_benchmark
для этого.
индексация булевской переменной с array[array != 0]
, кажется, является самой быстрой (и самой короткой) решение.
Для меньших массивов подход MaskedArray является очень медленным по сравнению с другими подходами, однако с такой скоростью, как подход индексации булевской переменной. Однако для умеренно размерных массивов нет большого различия между ними.
Вот код, который я использовал:
from simple_benchmark import BenchmarkBuilder
import numpy as np
bench = BenchmarkBuilder()
@bench.add_function()
def boolean_indexing(arr):
return arr[arr != 0]
@bench.add_function()
def integer_indexing_nonzero(arr):
return arr[np.nonzero(arr)]
@bench.add_function()
def integer_indexing_where(arr):
return arr[np.where(arr != 0)]
@bench.add_function()
def masked_array(arr):
return np.ma.masked_equal(arr, 0)
@bench.add_arguments('array size')
def argument_provider():
for exp in range(3, 25):
size = 2**exp
arr = np.random.random(size)
arr[arr < 0.1] = 0 # add some zeros
yield size, arr
r = bench.run()
r.plot()