地方门户网站的特点,网站开发中心,网页设计实验心得,网站轮播广告代码利用numpy的并行操作可以比纯用Python的list快很多#xff0c;不仅如此#xff0c;代码往往精简得多。 So, 这篇来讲讲进阶的广播和花哨索引操作#xff0c;少写几个for循环#xff08;#xff09;。 目录 一个二维的例题
一个三维的例题 解法一
解法二
更难的三维例题… 利用numpy的并行操作可以比纯用Python的list快很多不仅如此代码往往精简得多。 So, 这篇来讲讲进阶的广播和花哨索引操作少写几个for循环。 目录 一个二维的例题
一个三维的例题 解法一
解法二
更难的三维例题
解法一
解法二
独热编码
写法一 写法二 一个二维的例题
从一个简单的问题开始现在有一个向量 弄出这个东西出来 这个很简单
x [1, 2, 3]
res []
for i in x:for j in x:res.append(i j)
res torch.tensor(res).reshape(3, 3)
res# output
tensor([[2, 3, 4],[3, 4, 5],[4, 5, 6]])
以上内容是开玩笑的下面开始认真起来。自然这个很明显是个广播的送分题
x torch.tensor([1, 2, 3])
x x.reshape(-1, 1)#output
tensor([[2, 3, 4],[3, 4, 5],[4, 5, 6]]) 一个三维的例题
现在有一个向量 弄出这个东西出来 不过现在a b c都是长度为4的向量。x是一个(3, 4)的矩阵还是说明一下这里不表示分块矩阵目标是一个(3, 3, 4)的张量。 解法一
这个在GAT里面里面很常见把“”换成“concat”就是图卷积注意力的核心步骤之一。当时看了一大圈的zhihu和CSDN都是这么写的
先x.repeat(1,3)横着重复维度是(3, 3*4):
||表示两个向量拼接 然后x.reshape(3*3, -1), 维度变成(3*3, 4): 另一个竖着重复x.repeat(3,1)维度是(3*3, 4): 然后相加reshape即可。
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
(x.repeat(1, 3).reshape(3*3, 4) x.repeat(3, 1)).reshape(3, 3, 4)#output
tensor([[[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]],[[3, 3, 3, 3],[4, 4, 4, 4],[5, 5, 5, 5]],[[4, 4, 4, 4],[5, 5, 5, 5],[6, 6, 6, 6]]]) 解法二
后来想了一下其实可以直接广播。
解法一虽然复杂一点但是把题目里面的“”改成“||”就只能用解法一了。
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
x.unsqueeze(0) x.unsqueeze(1) # (1, 3, 4) (3, 1, 4)#output
tensor([[[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]],[[3, 3, 3, 3],[4, 4, 4, 4],[5, 5, 5, 5]],[[4, 4, 4, 4],[5, 5, 5, 5],[6, 6, 6, 6]]]) 更难的三维例题
现在有一个向量 弄出这个东西出来 不过现在a b c都是长度为4的向量。x是一个(3, 4)的矩阵还是说明一下这里不表示分块矩阵两两做点积目标是一个(3, 3)的张量。
先来一个错误示例
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
np.dot(x.unsqueeze(0), x.unsqueeze(1)), torch.dot(x.unsqueeze(0), x.unsqueeze(1))
两种做法都是错的torch.dot只支持1D的向量。np,dot处理高维度的张量的逻辑很不同这里可以
查阅资料不细说了。 解法一
可以用numpy里面最玄学的函数之一——np.meshgrid
先看看这个函数是干嘛的
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
i, j np.meshgrid(np.arange(x.shape[0]), np.arange(x.shape[1]), indexingij)
i, j# output
array([[0, 0, 0, 0],[1, 1, 1, 1],[2, 2, 2, 2]]array([[0, 1, 2, 3],[0, 1, 2, 3],[0, 1, 2, 3]])
np.arange(x.shape[0]) : array([0, 1, 2])
np.arange(x.shape[0]) : array([0, 1, 2, 3])
然后这个函数让前者往右重复让后者往下重复得到两个矩阵。然后细心看花哨索引和广播就知道
x x[i, j] !!! 了解这个函数干嘛后那下面我们进入正题。
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
x1, x2 x.unsqueeze(0), x.unsqueeze(1) # (1, 3, 4) (3, 1, 4)
x1, x2 torch.broadcast_tensors(x1, x2) # (3, 3, 4) (3, 3, 4) 手动广播
i, j np.meshgrid(np.arange(3), np.arange(3), indexingij)
torch.sum(x1[i, j, :] * x2[i, j, :], dim-1)#output
tensor([[ 4, 8, 12],[ 8, 16, 24],[12, 24, 36]])
用花哨索引固定前两个维度不动在第三个维度上相乘求和就是点积。搞定。 解法二
x torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])
x1, x2 x.unsqueeze(0), x.unsqueeze(1) # (1, 3, 4) (3, 1, 4)
torch.einsum(ijk,ijk-ij, x1, x2) # 这个函数支持广播#output
tensor([[ 4, 8, 12],[ 8, 16, 24],[12, 24, 36]])
np.einsum的全称是Einstein summation convention即爱因斯坦求和约定。这个约定允许我们通过一个简洁的字符串表达式来指定复杂的数组运算包括点积、矩阵乘法、张量收缩等。
这里是一个简单的运用。 独热编码
原来利用广播可以写独热编码。
写法一
一般独热编码可以这么写
a np.array([1, 2, 1, 0])
category len(np.unique(a))
eye np.eye(category)
eye, eye[a]#output
array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]]array([[0., 1., 0.],[0., 0., 1.],[0., 1., 0.],[1., 0., 0.]]
eye是一个单位矩阵a构成了一个花哨索引每次取eye的一行然后取4次。
十分简洁。缺点是a的每个值必须在[0,category-1]中。 写法二
a np.array([a, b, c, d, e, f])
b np.array([d, e, f])
b b.reshape(-1, 1) # (3, 1)
(a b).astype(int)# output
array([[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 1]]
支持各种类型的数据而且还能应对b的某个元素不在a中的尴尬情况此时一排都是0因为一排都是不等于。
有一个缺点是在第四行时Pycharm不知道这是一个ab是一个布尔数组在astype会画一个黄色看着闹心狗头。 文章转载自: http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.nrqtk.cn.gov.cn.nrqtk.cn http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.jtszm.cn.gov.cn.jtszm.cn http://www.morning.fhntj.cn.gov.cn.fhntj.cn http://www.morning.ltpph.cn.gov.cn.ltpph.cn http://www.morning.srbfz.cn.gov.cn.srbfz.cn http://www.morning.qnbck.cn.gov.cn.qnbck.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.cgstn.cn.gov.cn.cgstn.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.qbtj.cn.gov.cn.qbtj.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.a3e2r.com.gov.cn.a3e2r.com http://www.morning.zhishizf.cn.gov.cn.zhishizf.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn http://www.morning.jwrcz.cn.gov.cn.jwrcz.cn http://www.morning.xykst.cn.gov.cn.xykst.cn http://www.morning.jftl.cn.gov.cn.jftl.cn http://www.morning.qsmdd.cn.gov.cn.qsmdd.cn http://www.morning.mlfgx.cn.gov.cn.mlfgx.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.wdnkp.cn.gov.cn.wdnkp.cn http://www.morning.wjmb.cn.gov.cn.wjmb.cn http://www.morning.ssqrd.cn.gov.cn.ssqrd.cn http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.ywxln.cn.gov.cn.ywxln.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.nmymn.cn.gov.cn.nmymn.cn http://www.morning.rhlhk.cn.gov.cn.rhlhk.cn http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn http://www.morning.jbztm.cn.gov.cn.jbztm.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.xykst.cn.gov.cn.xykst.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.mmhaoma.com.gov.cn.mmhaoma.com http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.lxhrq.cn.gov.cn.lxhrq.cn http://www.morning.poapal.com.gov.cn.poapal.com http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.wdshp.cn.gov.cn.wdshp.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.rcmwl.cn.gov.cn.rcmwl.cn http://www.morning.lyrgp.cn.gov.cn.lyrgp.cn http://www.morning.pcngq.cn.gov.cn.pcngq.cn http://www.morning.qlsyf.cn.gov.cn.qlsyf.cn http://www.morning.mgbsp.cn.gov.cn.mgbsp.cn http://www.morning.zrlwl.cn.gov.cn.zrlwl.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn