高维数组相乘的运算规则

1、同维相乘
相乘必须满足以下两个条件:

  1. 两个n维数组的前n-2维必须完全相同。例如(3,2,4,2)(3,2,2,3)前两维必须完全一致;
  2. 最后两维必须满足二阶矩阵乘法要求。例如(3,2,4,2)(3,2,2,3)的后两维可视为(4,2)x(2,3)满足矩阵乘法。

这样的同维矩阵相乘,所得到的维度是:前n-2维不变,后2维进行矩阵乘法。
例如,(3,2,4,2)*(1,2,2,3)——>>(3,2,4,3)

注意:由于广播机制,第一维为1的,可以与第一维任何数相乘,例如:
(1,2,4,2)*(3,2,2,3)——>>(3,2,4,3)与上例结果相同。

import numpy as np

# 前两个高维1和2必须对应完全相等!后面两个只需满足矩阵相乘要求即可。
a = np.zeros( (3,2,4,2) )  
b = np.zeros( (3,2,2,3) ) 

w = np.matmul(a,b)
print( w.shape )

# 结果:
(3, 2, 4, 3)

2、不同维度
在使用numpy数组时,不同维度相乘无法使用matmul,而使用*进行的是逐元素相乘。
会通过广播机制补充到同维度,再进行同维度的乘法。

例如(2,2,1)*(0,1)

import numpy as np
a = np.floor(10*np.random.random((2,2,1)))
b = [[0],[1]]
# a.reshape(3,3)
print(a)
print(b)

c = a*b
# c = np.matmul(a,b)
print(c.shape)
print(c)

可得:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值