Python Broadcast机制

最近在用numpy的时候,里面的矩阵和向量之间各种乘法加法搞的我头昏脑胀,整理下总结出来的规则

首先说明array型数据结构有两种类型,一种是一维的向量,比如用np.linspace(1,2,num=2)创建出的对象,shape为(2,);另外一种就是多维的矩阵,如np.zeros(1,2)创建出的对象,其shape为(1,2),这两种类型是不一样的。

一、矩阵之间的矩阵乘法

不必多说,就是按照正常的矩阵乘法规则来做
(N,M) (M,P) = (N,P)

二、矩阵之间按元素相乘、相加

这里开始就涉及到广播(broadcast)的问题了。
其实也比较简单,两个矩阵broadcast后的结果每一维都是两个矩阵中最大的。

但broadcast必须满足两个规则,即要么相对应的维数相等,要么其中有一个矩阵的维数是1
那么问题来了,哪两个维度是相对应的维数呢?规则就是将矩阵的shape写出来,然后按右对齐逐维对比。

通过以上方法,可以得出两矩阵broadcast结果的维数,而最后结果的计算方法就是先将两个矩阵都broadcast到结果的维数,然后再按照相同维度的矩阵对应元素相乘、相加。例子如下

A      (4d array):  8 x 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中实现广播机制通常使用多线程或者多进程的方式,其中多线程是较为常用的一种实现方式。 在多线程中,线程之间可以共享数据,因此可以将广播的消息存储在某个共享的数据结构中,例如队列或者列表。然后每个线程可以从该数据结构中读取消息,并根据消息的类型进行相应的处理。 下面是一个简单的 Python 广播机制的实现示例: ```python import threading class Broadcaster: def __init__(self): self.subscribers = [] self.lock = threading.Lock() def subscribe(self, subscriber): with self.lock: self.subscribers.append(subscriber) def unsubscribe(self, subscriber): with self.lock: self.subscribers.remove(subscriber) def broadcast(self, message): with self.lock: for subscriber in self.subscribers: subscriber.receive(message) class Subscriber: def __init__(self, name): self.name = name def receive(self, message): print(f"{self.name} received message: {message}") broadcaster = Broadcaster() subscriber1 = Subscriber("Subscriber 1") subscriber2 = Subscriber("Subscriber 2") subscriber3 = Subscriber("Subscriber 3") broadcaster.subscribe(subscriber1) broadcaster.subscribe(subscriber2) broadcaster.subscribe(subscriber3) broadcaster.broadcast("Hello World!") broadcaster.unsubscribe(subscriber2) broadcaster.broadcast("Goodbye World!") ``` 在上述示例中,`Broadcaster` 类实现了广播机制的核心逻辑,`Subscriber` 类则表示广播的订阅者。`Broadcaster` 类中维护了一个订阅者列表,每当广播一个消息时,就会遍历订阅者列表,将消息发送给每一个订阅者。订阅者可以通过 `receive` 方法接收到消息,并进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值