文章目录

  • 原理
  • 处理步骤
  • 思考
  • 源代码
    • 1. 计算网络
    • 2. 验证网络能力:

原理

联想记忆功能分为自联想和异联想,异联想也称为双向联想记忆,简写为BAM。BAM存储器可存储两组矢量,若有如下N维矢量A与P维矢量B:
A = [ a 0 , a 1 , … , a N − 1 ] ∈ { − 1 , 1 } N A=[a_0,a_1,\dots,a_{N-1}]\in \{-1,1\}^N A=[a0​,a1​,…,aN−1​]∈{−1,1}N
B = [ b 0 , b 1 , … , b P − 1 ] ∈ { − 1 , 1 } P B=[b_0,b_1,\dots,b_{P-1}]\in \{-1,1\}^P B=[b0​,b1​,…,bP−1​]∈{−1,1}P
构成M对矢量 ( A s , B s ) (A_s, B_s) (As​,Bs​), s = 0,1,…, M-1,将它们存入BAM存储器即可进行由A到B或由B到A的双向联想,即给定A(或B)可经联想得到对应的标准样本B(或A),当有噪声或缺损时,联想功能可使样本对复原。

人工神经网络力图实现这种功能。Kosko的BAM网络就是其中的一种。如图所示,与矢量A相应的一层有N个节点,另一层对应矢量B,有P个节点,两层间双向连接。假定B到A的传输为正向,正向的权矩阵为W,反之,A到B为反向传输,权矩阵为 W T W^T WT。

如果输入矢量由上层加入,且相应于网络中B的稳定状态,则经W之作用产生A稳定状态。同理,如果输入矢量在下层,且相应于网络中A的稳定状态,经 W T W^T WT之作用产生B稳定状态。

当任意矢量输入时,网络要经若干次迭代计算演变至稳态,过程为
W B ( t ) → A ( t + 1 ) W T A ( t + 1 ) → B ( t + 2 ) W B ( t + 2 ) → A ( t + 3 ) ⋯ WB(t)\rightarrow A(t+1)\\ W^TA(t+1)\rightarrow B(t+2)\\ WB(t+2)\rightarrow A(t+3)\\ \cdots WB(t)→A(t+1)WTA(t+1)→B(t+2)WB(t+2)→A(t+3)⋯
直到A,B为稳态,演变过程结束。
网络学习遵从Hebb规则,若给定M个双极性矢量对
( A 0 , B 0 ) , ( A 1 , B 1 ) … , ( A M − 1 , B M − 1 ) (A_0,B_0),(A_1,B_1)…,(A_{M-1},B_{M-1}) (A0​,B0​),(A1​,B1​)…,(AM−1​,BM−1​)
则正、反向权矩阵为
W = ∑ s = 0 M − 1 A s B s T W=\sum_{s=0}^{M-1}A_sB_s^T W=s=0∑M−1​As​BsT​
根据转置的性质:
W T = ∑ s = 0 M − 1 B s A s T W^T=\sum_{s=0}^{M-1}B_sA_s^T WT=s=0∑M−1​Bs​AsT​
如果BAM网络神经元函数阂值为0,则称为齐次BAMⅥ网终,其能量函
数为
E ( A , B ) = − 1 2 A T W B − − 1 2 B T W T A = − A T W B E(A, B)=-\frac{1}{2}A^TWB--\frac{1}{2}B^TW^TA=-A^TWB E(A,B)=−21​ATWB−−21​BTWTA=−ATWB
若神经元非线性函数为f,则述齐次BAM动态特性的差分方程为

  • 正向联想(B→A)
    a i ( t + 1 ) = f [ ∑ j = 1 P w i j b j ( t ) ] a_i(t+1)=f\left[\sum_{j=1}^Pw_{ij}b_j(t)\right] ai​(t+1)=f[j=1∑P​wij​bj​(t)]
  • 反向联想(A→B)
    b j ( t + 1 ) = f [ ∑ i = 1 N w i j a i ( t + 1 ) ] b_j(t+1)=f\left[\sum_{i=1}^Nw_{ij}a_i(t+1)\right] bj​(t+1)=f[i=1∑N​wij​ai​(t+1)]

处理步骤

所处理的数据为:
A 1 = [ 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 ] T \mathbf{A}_{1}=[1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1]^{T} A1​=[1,−1,1,−1,1,−1,1,−1,1,−1,1,−1,1,−1,1]T
A 2 = [ 1 , 1 , − 1 , − 1 , 1 , 1 , − 1 , − 1 , 1 , 1 , − 1 , − 1 , 1 , 1 , − 1 ] T \mathbf{A}_{2}=[1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1]^{T} A2​=[1,1,−1,−1,1,1,−1,−1,1,1,−1,−1,1,1,−1]T
A 3 = [ 1 , 1 , 1 , − 1 , − 1 , − 1 , 1 , 1 , − 1 , − 1 , 1 , 1 , 1 ] T \mathbf{A}_{3}=[1,1,1,-1,-1,-1,1,1,-1,-1,1,1,1]^{T} A3​=[1,1,1,−1,−1,−1,1,1,−1,−1,1,1,1]T
A 4 = [ 1 , 1 , 1 , 1 , − 1 , − 1 , − 1 , − 1 , 1 , 1 , 1 , 1 , − 1 , − 1 , − 1 ] T \mathbf{A}_{4}=[1,1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1]^{T} A4​=[1,1,1,1,−1,−1,−1,−1,1,1,1,1,−1,−1,−1]T
B 1 = [ 1 , 1 , 1 , 1 , − 1 , − 1 , − 1 , − 1 , 1 , 1 ] T B 2 = [ 1 , 1 , 1 , − 1 , − 1 , − 1 , 1 , 1 , 1 , − 1 ] T B 3 = [ 1 , 1 , − 1 , − 1 , 1 , 1 , − 1 , − 1 , 1 , 1 ] T B 4 = [ 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 ] T \begin{aligned} \mathbf{B}_{1} &=[1,1,1,1,-1,-1,-1,-1,1,1]^{T} \\ \mathbf{B}_{2} &=[1,1,1,-1,-1,-1,1,1,1,-1]^{T} \\ \mathbf{B}_{3} &=[1,1,-1,-1,1,1,-1,-1,1,1]^{T} \\ \mathbf{B}_{4} &=[1,-1,1,-1,1,-1,1,-1,1,-1]^{T} \end{aligned} B1​B2​B3​B4​​=[1,1,1,1,−1,−1,−1,−1,1,1]T=[1,1,1,−1,−1,−1,1,1,1,−1]T=[1,1,−1,−1,1,1,−1,−1,1,1]T=[1,−1,1,−1,1,−1,1,−1,1,−1]T​

  1. 选择齐次 Koske型BAM网终编制程序实现联想记忆。设神经元非线性函数f为硬限幅函数,即f(x)=sgn(x);当x=0时,神经元的输出维持不变。
  2. 根据Hebb规则算出网终的连接权矩阵:
    W = [ 4 2 2 − 2 0 − 2 0 − 2 4 0 2 0 0 − 4 2 0 2 0 2 − 2 2 0 0 0 2 0 − 2 − 4 2 2 − 2 − 4 0 0 2 0 2 0 − 2 − 2 0 2 2 2 − 4 − 2 0 2 0 0 − 2 0 0 0 − 2 0 2 4 − 2 − 2 0 2 − 2 2 0 2 − 4 − 2 0 4 − 2 0 − 4 0 2 4 − 2 0 − 2 2 4 2 2 − 2 0 − 2 0 − 2 4 0 0 − 2 2 − 2 0 − 2 4 2 0 − 4 0 − 2 2 2 0 − 2 0 − 2 0 0 − 2 − 4 0 0 2 0 2 0 − 2 − 2 2 4 0 0 − 2 0 − 2 0 2 2 0 2 − 2 − 2 0 2 0 2 0 0 0 2 − 2 2 0 2 − 4 − 2 0 4 ] W=\begin{bmatrix} 4 & 2 & 2 & -2 & 0 & -2 & 0 & -2 & 4 & 0 \\ 2 & 0 & 0 & -4 & 2 & 0 & 2 & 0 & 2 & -2 \\ 2 & 0 & 0 & 0 & 2 & 0 & -2 & -4 & 2 & 2 \\ -2 & -4 & 0 & 0 & 2 & 0 & 2 & 0 & -2 & -2 \\ 0 & 2 & 2 & 2 & -4 & -2 & 0 & 2 & 0 & 0 \\ -2 & 0 & 0 & 0 & -2 & 0 & 2 & 4 & -2 & -2 \\ 0 & 2 & -2 & 2 & 0 & 2 & -4 & -2 & 0 & 4 \\ -2 & 0 & -4 & 0 & 2 & 4 & -2 & 0 & -2 & 2 \\ 4 & 2 & 2 & -2 & 0 & -2 & 0 & -2 & 4 & 0 \\ 0 & -2 & 2 & -2 & 0 & -2 & 4 & 2 & 0 & -4 \\ 0 & -2 & 2 & 2 & 0 & -2 & 0 & -2 & 0 & 0 \\ -2 & -4 & 0 & 0 & 2 & 0 & 2 & 0 & -2 & -2 \\ 2 & 4 & 0 & 0 & -2 & 0 & -2 & 0 & 2 & 2 \\ 0 & 2 & -2 & -2 & 0 & 2 & 0 & 2 & 0 & 0 \\ 0 & 2 & -2 & 2 & 0 & 2 & -4 & -2 & 0 & 4 \end{bmatrix} W=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​422−20−20−2400−2200​200−420202−2−2−4422​200020−2−422200−2−2​−2−4002020−2−2200−22​0222−4−2020002−200​−2000−2024−2−2−20022​02−2202−4−20402−20−4​−20−4024−20−22−2002−2​422−20−20−2400−2200​0−22−20−2420−40−2204​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​
    四对矢量所对应的稳定状态的能量值:[-158 -142 -158 -146]
  3. 验证网络的联想能力。
    选择标准样本 A i A_i Ai​输入网终进行迭代运算直至网络稳定,观察上下两层的状态是否为 ( A i , B i ) (A_i,B_i) (Ai​,Bi​)。
    经过权值和符号函数的非线性作用,进行一次迭代之后,迭代成功没有偏差。
    A i = s g n ( W ∗ B i ) , i = 1 , 2 , 3 , 4 B i = s g n ( W T ∗ A i ) , i = 1 , 2 , 3 , 4 A_i=sgn(W*B_i),i=1,2,3,4\\ B_i=sgn(W^T*A_i),i=1,2,3,4 Ai​=sgn(W∗Bi​),i=1,2,3,4Bi​=sgn(WT∗Ai​),i=1,2,3,4
  4. 验证网络的抗噪能力。
    随机选取标准矢量 A 1 A_1 A1​若干位(如2位)取反形成畸变矢量
    A 1 ′ = [ 1 − 1 1 − 1 1 − 1 − 1 − 1 1 1 1 − 1 1 − 1 1 ] T A_1'=\begin{bmatrix}1&-1&1&-1&1&-1&-1&-1&1&1&1&-1&1&-1&1\end{bmatrix}^T A1′​=[1​−1​1​−1​1​−1​−1​−1​1​1​1​−1​1​−1​1​]T
    将其输入网络迭代至稳态,观察到结果:
    A 1 ′ = A 1 , B 1 ′ = B 1 A_1'=A_1,B_1'=B_1 A1′​=A1​,B1′​=B1​
    经过两次迭代期间能量变化为:
    [-118, -158]
    网络能量E在迭代过程中是减小的。
  5. 噪声大小对联想能力的影响。
    统计个A矢量分别在1~3位取反时的联想正确率。记录所得结果产观察联想正确率和取反位数之间的关系
噪声对网络联想正确率的影响:
取反位数 1 2 3
A1 100% 93.4% 81.6%
A2 100% 96.4% 80.4%
A3 100% 90.5% 76.2%
A4 100% 90.15% 75.1%
噪声对网络联想次数的影响:
取反位数 1 2 3
A1 2 1.988 2.091
A2 2 2.0585 2.26
A3 2 2.0055 2.035
A4 2 1.9905 2.0655
  1. 比较正、反向联想的抗噪能力。统计4个B矢量分别在1-3位取反时的正确率
噪声对网络联想正确率的影响:
取反位数 1 2 3
B1 100% 70.2% 31.4%
B2 80.8% 61.1% 27.1%
B3 90.25% 69.9% 23.55%
B4 78.8% 56.5% 26.35%
噪声对网络联想次数的影响:
取反位数 1 2 3
B1 2. 2.1605 2.219
B2 1.808 2.0555 2.252
B3 1.9025 1.9975 2.2105
B4 1.788 1.9355 2.165
  1. 伪稳定状态。
    除以上四对矢量对应的稳定状态外,寻找2个伪稳定状态并分别计算所对应的能量值。
    第一个样本所对应的伪稳定性:
    A 1 ′ = [ 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , 1 , 1 , − 1 , − 1 , − 1 , 1 , 1 , 1 ] , B 1 ′ = [ 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , − 1 , 1 , 1 ] A 2 ′ = [ 1 , 1 , 1 , − 1 , − 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 , − 1 , 1 ] , B 2 ′ = [ 1 , 1 , 1 , 0 , 1 , − 1 , − 1 , − 1 , 1 , 1 ] A_1'=[1,-1,1,-1,1,-1,1,1,1,-1,-1,-1,1,1,1],B_1'=[1,1,-1,1,-1,1,-1,-1,1,1]\\ A_2'=[1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,1,-1,1],B_2'=[1,1,1,0,1,-1,-1,-1,1,1] A1′​=[1,−1,1,−1,1,−1,1,1,1,−1,−1,−1,1,1,1],B1′​=[1,1,−1,1,−1,1,−1,−1,1,1]A2′​=[1,1,1,−1,−1,−1,1,−1,1,−1,1,−1,1,−1,1],B2′​=[1,1,1,0,1,−1,−1,−1,1,1]
    此时对应的能量值分别为:
    E 1 = − 146 E 2 = − 130 E_1=-146\\ E_2=-130 E1​=−146E2​=−130
    而第一个样本所对应的能量值为-158。

思考

  1. 在步骤4中观察网络能量E是如何变化的?
    从步骤4中可以看出,网络能量随着迭代次数的增加而减小。这是因为双向联想网络是Hopfield网络的一种,所以也具有Hopfeld网络特性。而对于标准Hopfield网络其能量函数E对时间的导数为负值。
    d E d t = − ∑ i C i ( d V i d t ) 2 d f i − 1 ( V i ) d V i ≤ 0 \frac{\mathrm{d}E}{\mathrm{d}t}=-\sum_i C_i \left(\frac{\mathrm{d}V_i}{\mathrm{d}t}\right)^2 \frac{\mathrm{d}f_i^{-1}(V_i)}{\mathrm{d}V_i}\leq 0 dtdE​=−i∑​Ci​(dtdVi​​)2dVi​dfi−1​(Vi​)​≤0
    也就是说网络息是朝着能量函数E减小的方问运动,且达到稳态时取极小值。

  2. 如果我们想要“擦除”存储矢量对中的某对(Aa,B3},应如何调整网
    络?

    双向联想记忆网络特性主要体现在权值W,如果想要擦除存储矢量中的某对 ( A i , B i ) (A_i,B_i) (Ai​,Bi​),只需对权值进行调整。
    因为权值为
    W = ∑ s = 0 M − 1 A s B s T W=\sum_{s=0}^{M-1}A_sB_s^T W=s=0∑M−1​As​BsT​
    所以为了尽量减小运算量,更新权值为:
    W ′ = W − A i B i T W'=W-A_iB_i^T W′=W−Ai​BiT​

  3. 通过总结笫5步和第6步结果,能得岀什么结论?

  • 随着网络噪声的增大,网络联想正确率下降,说明网络恢复的能力是有限的。
  • 网络对不同样本组的记忆力大体相同。
  • 随着噪声的增大,网络达到稳态所需的迭代次数略有增加。

源代码

所使用语言为python:

1. 计算网络

import numpy as np
import random;A= np.array([[1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1],[1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1],[1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,1,1,1],[1,1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1]] )
B=np.array([[1,1,1,1,-1,-1,-1,-1,1,1],
[1,1,1,-1,-1,-1,1,1,1,-1],
[1,1,-1,-1,1,1,-1,-1,1,1],
[1,-1,1,-1,1,-1,1,-1,1,-1]])
A=A.T
B=B.T
# 计算权值矩阵
w=np.dot(A,B.T)
# 计算能量函数
e=np.zeros(4)
for i in range(4):e[i]=-np.dot(np.dot(A[:,i].T,w),B[:,i])
print(e)

2. 验证网络能力:

a0=A[:,0]r=random.sample(range(len(A)),2)
a=a0.copy()
a[r]=-a[r]
print(a0)
print(a)
temp=np.zeros((15,1),dtype=int)
# temp=0
# print(temp)
tempB=np.sign(np.dot(w.T,a))# temp=np.array( (15,4),dtype=int )timeNum=0
errArr=[]
while not((temp==a).all()):temp=a.copy()b=np.sign(np.dot(w.T,a))b[np.where(b==0)]=tempB[np.where(b==0)]tempB=b.copy()ee=-np.dot(np.dot(a.T,w),b)a=np.sign(np.dot(w,b))a[np.where(a==0)]=temp[np.where(a==0)]errArr.append(ee)timeNum+=1
#     print(temp==A)
#     print(tempB==B)
print(timeNum)
print(a)
print(errArr)
  1. 验证网络抗噪能力
    验证对A样本的抗噪能力:
timeAll=np.zeros((4,3),dtype=int)
correctNum=np.zeros((4,3),dtype=int)
for i in range(4):for j in range(1,4):a0=A[:,i]for k in range(2000):r=random.sample(range(len(A)),j)a=a0.copy()a[r]=-a[r]temp=np.zeros((15,1),dtype=int)# temp=0# print(temp)tempB=np.sign(np.dot(w.T,a))timeNum=0errArr=[]while not((temp==a).all()):temp=a.copy()b=np.sign(np.dot(w.T,a))b[np.where(b==0)]=tempB[np.where(b==0)]tempB=b.copy()ee=-np.dot(np.dot(a.T,w),b)a=np.sign(np.dot(w,b))a[np.where(a==0)]=temp[np.where(a==0)]errArr.append(ee)timeNum+=1#     print(temp==A)#     print(tempB==B)timeAll[i][j-1]+=timeNumif (a0==a).all():correctNum[i][j-1]+=1#else:#print(i,a,b,ee)
print(timeAll/2000.0,correctNum/2000.0*100)

验证对B样本的抗噪能力:

timeAll=np.zeros((4,3),dtype=int)
correctNum=np.zeros((4,3),dtype=int)
for i in range(4):for j in range(1,4):b0=B[:,i]for k in range(2000):r=random.sample(range(len(B)),j)b=b0.copy()b[r]=-b[r]temp=np.zeros((10,1),dtype=int)# temp=0# print(temp)tempA=np.sign(np.dot(w,b))
#             tempA[np.where(tempB==0)]=1timeNum=0errArr=[]while not((temp==b).all()):temp=b.copy()a=np.sign(np.dot(w,b))a[np.where(a==0)]=tempA[np.where(a==0)]tempA=a.copy()ee=-np.dot(np.dot(a.T,w),b)b=np.sign(np.dot(w.T,a))b[np.where(b==0)]=temp[np.where(b==0)]errArr.append(ee)timeNum+=1#     print(temp==A)#     print(tempB==B)timeAll[i][j-1]+=timeNumif (b0==b).all():correctNum[i][j-1]+=1
print(timeAll/2000.0,correctNum/2000.0*100)

双向联想记忆网络的原理与python简单实现相关推荐

  1. PID原理及python简单实现与调参

    一.前言 近期在实际项目中使用到了PID控制算法,于是就该算法做一总结. 二.PID控制算法详解 2.1 比例控制算法 例子: 假设一个水缸,需要最终控制水缸的水位永远维持在1米的高度. 水位目标:T ...

  2. 蒙版原理以及Python简单实现

    第一次发博客,就试试看的心态,不喜勿喷~ 蒙版可以将两张毫不相关的图片合成为一张图,其实就是使用蒙版mask对两张图片的像素做了加权平均处理的结果. 比如对于像素点(x1,y1,v1), (x2,y2 ...

  3. python网络爬虫程序_Python写的网络爬虫程序(很简单)

    Python写的网络爬虫程序(很简单) 这是我的一位同学传给我的一个小的网页爬虫程序,觉得挺有意思的,和大家分享一下.不过有一点需要注意,要用python2.3,如果用python3.4会有些问题出现 ...

  4. 信号处理之频谱原理与python实现

    目录 频谱分析 FFT频谱分析原理 下面就用python案例进行说明 案例1 案例2 短时傅里叶变换STFT 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区.QQ交流群:941473018 ...

  5. python原理_强化学习:原理与Python实现

    强化学习:原理与Python实现 作者:肖智清 著 出版日期:2019年08月 文件大小:17.18M 支持设备: ¥60.00 适用客户端: 言商书局 iPad/iPhone客户端:下载 Andro ...

  6. 网络编程原理进阶___TCP/IP(javaee)

    点击跳转 本章重点 网络编程原理进阶 应用层 DNS 传输层 UDP TCP面试重点 `TCP`原理 确认应答 超时重传 连接管理(面试重点) 3次握手 4次挥手 滑动窗口 流量控制 拥塞控制 延时应 ...

  7. 条件生成对抗神经网络,生成对抗网络gan原理

    关于GAN生成式对抗网络中判别器的输出的问题 . ...摘要生成式对抗网络GAN(Generativeadversarialnetworks)目前已经成为人工智能学界一个热门的研究方向.GAN的基本思 ...

  8. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  9. BP神经网络理解原理——用Python编程实现识别手写数字(翻译英文文献)

    BP神经网络理解原理--用Python编程实现识别手写数字   备注,这里可以用这个方法在csdn中编辑公式: https://www.zybuluo.com/codeep/note/163962 一 ...

最新文章

  1. Pandas 数据类型概述与转换实战
  2. 大年初一微信闪退?看看如何修复的
  3. Python3中使用map()结果出错的解决方法
  4. 【Flask项目2】创建模型类映射到数据库,密码加密实现(3)
  5. 变分推断(Variational Inference)最新进展简述
  6. win7 VS2013 新建工程 编译lua5.2.0 静态库
  7. Apollo进阶课程⑯丨Apollo感知之旅——感知概貌
  8. oracle菜鸟学习之 复杂的更新语句使用
  9. 试述hadoop生态系统以及每个部分的具体功能_Hadoop在大数据分析中的意义和作用...
  10. python3 闭包
  11. git删除某次提交(某个commit)的方法【转】
  12. WINDOWS环境下RABBITMQ的启动和停止命令
  13. [渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(2)
  14. SharePoint 2010的Form认证的用户注册功能
  15. mysql算法优化原则_Mysql语句优化的原则——让你写sql更加顺手
  16. win10便签常驻桌面_Win10用户的印象笔记便签深度体验 | 大使专栏
  17. AIR202/208使用AT指令方式连接MQTT调试笔记
  18. 规则库捕获漏洞信息专用脚本
  19. RxJava过滤操作符
  20. react 项目框架的搭建(一)

热门文章

  1. Barcode Producer for Mac(创建条形码软件)
  2. 手机抓包获取数据,ROOT权限获取,xian鱼,taobao
  3. 抖音表白程序Python版,明人不说暗话,我喜欢你
  4. 电商运营从哪些方面做数据分析?
  5. 现在,您可以在YouTube上播放免费的,广告支持的电影
  6. Excel无法跨表筛选,也不能多列筛选,要如何突破限制呢?本教材有方法
  7. 10 个最佳 VSCode 插件,帮助你写出更优雅的代码
  8. 【机器视觉】Halcon 19安装教程详解
  9. Android课设之校园二手交易app
  10. 银行核心系统的清算与结算