位向量的解读(初始化、赋值、取值)

什么是位向量?

位向量:

一组0,1串

个人理解:为了更有效的利用存储空间,使用编程语言层面的基本数据类型来表示机器位的方法。


什么时候使用位向量呀?

应用背景:

假设我有一组均小于一千万的数(这组数个数很多,至少二百万个),要对这组数进行排序工作,并输出到文件中,要求尽可能减少存储空间,提高运行效率。

这时候我们应该怎么办呢?

最直接的方法是我们使用整数来存储每一个数,然后对这组数使用常规的排序算法,但是这样我们需要10^7 * 4 B (假设整数是32位)这么多存储空间。

解决方案思路:
使用一个机器位来表示一个数的存在与否,数的位置即表示数的值,排序过程就是对这组数遍历,然后对存在数的位置赋值的过程,最后从第一位到最后一位顺序输出对应的数即可。例如:一个数为 31,那么在位向量的第31位赋值为1,输出的时候遍历到31位时,位值为1输出31即可。此时我们的存储空间为10^7 /8 B,存储空间明显变小了.


位向量的实现

位向量的实现有很多种,在这里我们就使用整型数组来表示吧。例如上述背景,一个整数可以表示32个机器位,那么10^7个机器位我们需要(10^7-1) / 32 + 1个整数。

详情见代码:

#define N 10000000
#define SHIFT 5
#define MASK 0x1F
#define BITOFINT 32 //假设整型为32位

/*
**赋值函数:给位向量的对应位置赋值1
**参数:i是要赋值1的数的位置,a[]为位向量数组
**返回值:null
*/
void set(int i, int *a)
{
  a[i >> SHIFT] |= 1 << ((i & MASK));
}

/*
**擦除函数:将对应位置赋值为0
**参数:i是要赋值1的数的位置,a[]为位向量数组
**返回值:null
*/
void clr(int i, int *a)
{
  a[i >> SHIFT] &= ~(1 << (i & MASK));
}

/*
**测试函数:测试位向量的对应位置的值.
**参数:i是要测试的位置,a[]为位向量数组.
**返回值: 0 or 大于0的数.
*/
int test(int i, int *a)
{
  return a[i >> SHIFT] & (1 << (i&MASK));
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
突触权重向量初始化是神经网络中非常重要的一步,它决定了神经网络的初始状态和学习过程中的收敛性。通常情况下,突触权重向量初始化可以使用以下几种方法: 1. 随机初始化:将突触权重向量初始化为一个小的随机数。这种方法适用于大多数情况,可以帮助网络避免陷入局部最优解。常见的随机初始化方法包括从均匀分布或高斯分布中随机采样。 2. 零初始化:将突触权重向量初始化为零。这种方法适用于某些特定情况,例如当网络的输入特征已经被预处理为具有零均值的情况。 3. Xavier初始化:根据突触权重向量的输入和输出维度,使用特定的公式来初始化权重。Xavier初始化方法可以帮助网络在前向传播和反向传播过程中保持梯度的稳定性。 4. He初始化:类似于Xavier初始化,但是根据突触权重向量的输入维度来初始化权重。He初始化方法适用于使用ReLU激活函数的网络。 下面是一个使用随机初始化方法初始化突触权重向量的例子: ```python import numpy as np # 初始化突触权重向量 input_size = 784 hidden_size = 100 output_size = 10 # 随机初始化隐藏层和输出层的权重 W1 = np.random.randn(input_size, hidden_size) * 0.01 b1 = np.zeros(hidden_size) W2 = np.random.randn(hidden_size, output_size) * 0.01 b2 = np.zeros(output_size) # 打印初始化后的权重 print("隐藏层权重:", W1) print("隐藏层偏置:", b1) print("输出层权重:", W2) print("输出层偏置:", b2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值