zoukankan      html  css  js  c++  java
  • numpy的broadcast是怎么做的

    其实大概是有下面4个原则.

    怎么判断能不能进行broadcast?

    从后往前对齐, 要么相同, 要么其中有一个是1. 官网上给了好几个例子. 比如3*1与1*4, 满足. 但如果是3*2与1*4, 那不行. 因为2与4不相同, 而且没有一个是1. 这个地方要是我说的不明白, 建议看官方文档给的例子.

    如果ndim不同怎么办?

    如果维数不同, 短的前面全补上1使得ndim相同, 比如说, 一个是2*3*4, 一个是4, 那么后者维数更少, 前面全补上1, 也就是1*1*4.

    broadcast后的形状如何?

    在做了上一步补齐ndim后, 每一个取max. 比如1*3与4*1. 那么就是(max(1,4),max(3,1)), 是(3,4).

    如果满足对齐规则, 怎么对齐?

    从右往左遇到的第一个1, 它右边有几维就跳出几层括号再开始拷贝, 并且是不带括号的拷贝. 画图吧.

    quiz: 怎么用broadcast得到每行相同/每列相同的矩阵?

    每行相同, 那么相当于是退了一层括号拷贝的, 那么1应该是出现在第1维(就是axis=0), 那么其实可以直接是向量. 每列相同, 那么没有退括号, 应该是列矩阵.

    quiz: 怎么得到outer sum? a,b=np.arange(1,5),np.arange(3,5), 想要4*2的矩阵.

    c[i][j]=a[i]+b[j], a需要broadcast为每列相同的, b需要为每行相同的矩阵. 因此如上说是a[,np.newaxis]+b.

  • 相关阅读:
    c#之静态构造函数和单例模式
    ugui之圆角矩形头像实现
    一些网站
    unity3d之实现各种滑动效果
    unity3d之切换场景不销毁物体
    unity3d之技能栏冷却
    unity3d之控制人物转向移动并播放动画
    vs常用快捷键
    构造函数的继承
    编写可维护的javascript 随笔
  • 原文地址:https://www.cnblogs.com/Tokubara/p/14221090.html
Copyright © 2011-2022 走看看