Element Wise函数在两个不同形状的numpy数组中的条目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Element Wise函数在两个不同形状的numpy数组中的条目相关的知识,希望对你有一定的参考价值。

设A是一个numpy形状的阵列(a,b,c),B是一个numpy形状的阵列(a',b,c)。设f(A_,B_)是将形状(b,c)的numpy数组A_和形状(b,c)的numpy数组B_映射到实数的函数。我想构造一个形状(a,a')的numpy数组C,其中通过将f应用于第一个索引上的切片来给出条目。天真的解决方案是

    A=np.reshape(range(2*3*4), (2,3,4))
    B=np.reshape(range(3*3*4), (3,3,4))
    C=np.empty((2,3))

    def f(A_,B_):
      return np.prod(A_)+np.prod(B_)

    for i in range(A.shape[0]):
        for j in range(B.shape[0]):
           C[i,j]=f(A[i],B[j])

将C返回为

 [[  0.00000000e+00,   6.47647525e+14,   3.99703747e+17],
  [  6.47647525e+14,   1.29529505e+15,   4.00351395e+17]]

我将把它应用于更大的阵列A,B,其中f的计算成本很高(上面的f只是一个玩具示例)。我通常会尝试避免以元素方式访问numpy数组,但在上述情况下我不知道如何实现这一点。

答案

对于示例中的维度:

A2 = np.prod(A, axis=2).prod(axis=1)
B2 = np.prod(B, axis=2).prod(axis=1)
Bv, Av = np.meshgrid(B2, A2)
C2 = Av + Bv

array([[                 0,    647647525324800, 399703747322880000],
       [   647647525324800,   1295295050649600, 400351394848204800]])

以上是关于Element Wise函数在两个不同形状的numpy数组中的条目的主要内容,如果未能解决你的问题,请参考以下文章

向量的一种特殊乘法 element wise multiplication

BBuf的CUDA笔记一,解析OneFlow Element-Wise 算子实现

BBuf的CUDA笔记一,解析OneFlow Element-Wise 算子实现

PyTorch中的matmul函数详解

InvalidArgumentError:断言失败:[Condition x == y did not hold element-wise:]

在pytorch中连接两个不同形状的火炬张量