У меня есть функция f(a, b, c)
, которая принимает в качестве параметров 3 вектора различной длины и возвращает одномерный массив (такой же длины, как у параметра a
).У меня также есть три 2D-массива (A, B, C
) с разными dtype
и одним идентичным измерением (N
), в то время как другое измерение отличается для всех трех.
Я хочу применить f
всамый эффективный способ для двумерных массивов вдоль их оси неидентичной длины, так что f
вызывается с одним столбцом (или строкой, если транспонирование имеет какое-либо различие) от каждого.
Наивный подход был бычто-то вроде сжатия двухмерных массивов вдоль идентичной оси и итерации по 3 кортежам, содержащим по одному столбцу из каждого массива (т. е. вызов f
N
раз), например.с N = 3
:
A = np.arange(9).reshape(3, 3)
B = np.arange(12).reshape(4, 3)
C = np.arange(15).reshape(5, 3)
result = np.array([f(a, b, c) for a, b, c in zip(A.T, B.T, C.T)])
Реальное N
в моем случае составляет ~ 30K, в то время как другие размеры массивов варьируются от 5 до ~ 1000.
Есть ли (значительно) более производительный способ с массивами такого размера, либо с использованием чистого Python, либо numpy
?