生成指定概率分布的文件(信息论实验二)

程序:

import numpy as np
import csv
import struct


def main():
    x = read_input(input('please input the path of the infile:')) #输入概率分布文件的路径
    msg = create_msg(x, int(input('input the length:'))) #输入生成的信息长度,单位为B
    write_output(input('please input the path of the outfile:'), msg) #输入输出文件的路径


def read_input(file):
    with open(file, 'r') as csvfile:  # 读取文件
        reader = csv.reader(csvfile)
        column = [float(row[1]) for row in reader]  # 读取csv文件存放概率的列至列表中
    return column


def create_msg(prob,msg_len):
    symbol_cumsum = np.cumsum(prob)  # cumsum函数用法为当前列数据为前面所有列的和
    symbol_random = np.random.uniform(size=msg_len)  # uniform()方法将随机生成长度为msg_len的实数数组,它在 [0,1] 范围内
    msg = np.searchsorted(symbol_cumsum, symbol_random)
    return msg


def write_output(fout,msg):
    with open(fout, 'wb') as fout:
        for i in msg:
            fout.write(struct.pack('B', i))


if __name__ == "__main__":
    main()

举例

  1. input_prob.csv是一个概率分布文件,第一列为256个符号:0~255,第二列为每一个符号的概率,概率相等,均为1/256,前十一行如下:
  2. 运行程序:
    在这里插入图片描述
    3.输出结果:
    用HxD编辑器打开out.dat结果如下:
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万斯达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值