pytorch 数据处理(复数处理)记录

因为无信通信中经常用到复数的乘法,pytorch中又没有现成的处理方式,自己懒得写,就在网上搜了下好心人分享的资料。确实是正确的。但是作者采用循环的方式,在处理大批量数据的时候非常慢,我对几十万复数的数据集执行操作时花了好几分钟才完成,故进行改动。改为矩阵处理后,瞬间就可以出结果。并不是什么有难度的操作,只是记录下以后方便使用。

代码如下:

H1 = torch.randn(3,2)  // 3代表数据的数量,选取小的数易于观察,2代表复数,分别是实部和虚部
H2 = torch.randn(3,2)  
print('H1',H1)
print('H2',H2)
def complexMulti(a,b):   // 循环的方式
    r = a.shape[0]
    c = torch.zeros([r,2])
    for i in range(r):
        c[i,0] = a[i,0]*b[i,0]-a[i,1]*b[i,1]
        c[i,1] = a[i,0]*b[i,1]+a[i,1]*b[i,0]
    return c

def complexMulti_1(a,b):   // 矩阵处理
    r = a.shape[0]
    c = torch.zeros([r,2])
    c[:,0] = a[:,0]*b[:,0]-a[:,1]*b[:,1]
    c[:,1] = a[:,0]*b[:,1]+a[:,1]*b[:,0]
    return c
y = complexMulti(H1,H2)
print('y',y)
y1 = complexMulti_1(H1,H2)
print('y1',y1)

结果如下:

H1 tensor([[-1.0672, -0.9281],
        [ 0.6703,  0.3585],
        [ 0.5990, -1.3287]])
H2 tensor([[-0.1537,  1.3645],
        [ 1.0352,  0.5920],
        [-0.9543, -0.8222]])
y tensor([[ 1.4305, -1.3135],
        [ 0.4817,  0.7680],
        [-1.6641,  0.7754]])
y1 tensor([[ 1.4305, -1.3135],
        [ 0.4817,  0.7680],
        [-1.6641,  0.7754]])

与python的复数乘法比较:

x = -1.0672-0.9281j
y = -0.1537+1.3645j
print(x * y)

(1.43042109-1.31354543j)

参考的文章如下:

https://blog.youkuaiyun.com/Stephanie2014/article/details/105984274

PyTorch中,初始版本的complexPyTorch使用两个张量来表示复杂张量,一个张量用于实部,一个用于虚部。 从1.7版开始,也可以使用torch.complex64类型的torch.complex64张量来表示复杂张量,但仅支持有限数量的操作。当前版本的complexPyTorch使用这种新的表示方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [complexPyTorch:在PyTorch中使用复杂值神经网络的高级工具箱](https://download.youkuaiyun.com/download/weixin_42127020/18265523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [pytorch 数据处理(复数处理)记录](https://blog.youkuaiyun.com/snowsnowsnow1991/article/details/109208329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python3基础 complex real imag __abs__ 取复数的实部 虚部 模](https://blog.youkuaiyun.com/weixin_39614528/article/details/110703133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值