Есть ли способ эффективно сравнить несколько массивов, которые транслируются вместе?Например:
a = np.arange( 0, 9).reshape(3,3)
b = np.arange( 9, 18).reshape(3,3)
c = np.arange(18, 27).reshape(3,3)
Если бы я транслировал их следующим образом:
abc = a[:,:,None,None,None,None] + b[None,None,:,:,None,None] + c[None,None,None,None,:,:]
Тогда каждый элемент abc
равен a_ij + b_kl + c_mn
, где ij
, kl
и mn
индексируют соответствующие массивы.Вместо этого я хотел бы получить min(a_ij, b_kl, c_mn)
или, в идеале, max(a_ij, b_kl, c_mn) - min(a_ij, b_kl, c_mn)
.Есть ли эффективный способ, которым я могу сделать это?
Я мог бы, конечно, транслировать временные массивы как:
Abc = a[:,:,None,None,None,None] + 0 * b[None,None,:,:,None,None] + 0 * c[None,None,None,None,:,:]
aBc = 0 * a[:,:,None,None,None,None] + b[None,None,:,:,None,None] + 0 * c[None,None,None,None,:,:]
abC = 0 * a[:,:,None,None,None,None] + 0 * b[None,None,:,:,None,None] + c[None,None,None,None,:,:]
, а затем найти мин / макс из этих массивов, однакоэти массивы могут быть довольно большими.Было бы лучше, если бы был какой-то способ сделать это за один шаг.
И, как дополнительное примечание, эти массивы гарантированно могут быть переданы, но не обязательно имеют одинаковую форму (например, (1, 3)
и (3, 3)
).