Python的广播机制

原理

两个数组的后缘维度相同,或者在其中一方的维度为1。广播在缺失或者长度为1的维度上补充

举例说明

其中一方维度为1:A为(4,5)的三维数组,B为(4,1)的二维数组,两者维度相同,一个维度相同, 其中另外一个维度的其中一方为1,这种情况是可以进行广播的。

#维度相同,当其中一个维度相同,两个为维度其中一个为1时,可以进行广播
import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
print(f'a={a}\n')
b=np.array([[1],[3]])#2*1
print(f'b={b}\n')
c=a+b
print(f'c={c}')
d = a/b
print(f'd={d}')

  a.shape= (2,3),b.shape=(2,1),第一个维度相同,第二个维度其中一个为1,可以广播,b被广播成b1,b1.shape=(2,3),此时相当于 c=a+b1;同理d=a/b相当于a/b1


 后缘维度:A为(3,4,5)的三维数据,B为(4,5)的二维数组。由于A和B的后缘维度都为(4,5),所以可以进行广播机制。
同理:A为(3,4)的二维数组,B为(4,)的1为数组,他们的后缘维度都是4,所以可以进行广播。

#当A和B的后缘维度相同时,启动广播机制
a=np.array([[[1,2],[2,3],[3,4]],[[2,3],[4,5],[7,8]]])#2*3*2
b=np.array([[6,6],[7,7],[8,8]])#3*2
print(a.shape)
print(b.shape)
c=a+b
print(c)
print(c.shape)#相加后,c的结果是(2,3,2)

 

 a.shape=(2, 3, 2),b.shape =  (3, 2),

经常使用的例子

每一行除以每行的均值

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
print(a/a.mean(axis =1,keepdims=1))

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

         解释:keepdims=1使得保持二维,使得返回的每行均值数组如上所示,此时shape = (2,1),不然就是这个,此时的shape=(2,),此时a.shape=(2,3),满足其中一方维度为1的条件,均值被广播成

每一列除以每一列的均值

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
a/a.mean(axis =0)

 

 这边没有keepdims=1,因为a.shape=(2,3),a.mean(axis=0).shape=(3,),,满足后缘维度相同的条件

当然也可以keepdims=1,结果相同

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
a/a.mean(axis =0,keepdims=1)

此时a.shape=(2,3),a.mean(axis =0,keepdims=1).shape=(1,3),满足后缘维度相同的条件

所以建议使用上方两个例子的时候,建议keepdims=1

 

 

 

 

 

参考:

python的广播机制(broadcasting)_python中的broadcasting_ningyuanfeng的博客-CSDN博客

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RSA广播攻击是一种利用RSA加密算法的漏洞,攻击者通过将相同的明文消息分别使用不同的公钥加密,然后将密文广播给多个用户,从而达到获取私钥的目的。 在Python中,我们可以通过使用`Crypto`库来实施RSA广播攻击。首先,我们需要生成一对公私钥对,并将公钥分发给多个用户。 ```python from Crypto.PublicKey import RSA # 生成RSA密钥对 key = RSA.generate(2048) # 获取公私钥 public_key = key.publickey().export_key() private_key = key.export_key() ``` 然后,我们可以使用公钥对明文进行加密,并将密文发送给多个用户。 ```python from Crypto.Cipher import PKCS1_OAEP # 创建RSA加密器 cipher = PKCS1_OAEP.new(key) # 加密明文 message = b"Hello, RSA Broadcast Attack!" ciphertext = cipher.encrypt(message) # 广播密文给多个用户 broadcast(ciphertext) ``` 接下来,多个用户使用相同的RSA公钥来解密密文。 ```python # 从广播接收密文 ciphertext = receive_ciphertext() # 创建RSA解密器 cipher = PKCS1_OAEP.new(key) # 解密密文 plaintext = cipher.decrypt(ciphertext) print("Plaintext:", plaintext) ``` 由于RSA广播攻击实际上是利用相同的明文进行多次加密,然后对比多个密文,因此可以通过简单地比较多个密文是否相同来判断是否存在安全漏洞。 为了防止RSA广播攻击,我们应当使用随机化的因子(nonce)来对明文进行加密,这样即使使用相同的明文进行加密,也会得到不同的密文。此外,密文的传输应该使用安全的通信渠道来防止被截获。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值