MATLAB中的ind2vec和vec2ind函数

来源:互联网 发布:网站显示apache tomcat 编辑:程序博客网 时间:2024/06/05 00:58

ind2vec和vec2ind比较简单,搞明白其中一个,反之另一个就明白了。

 

先说容易理解的vec2ind吧,从命令名字上可以看出是“向量变索引”,

假设一个3*6的稀疏矩阵T(1,:)=[0 1 0 0 1 0];T(2,:)=[1 0 1 1 0 0];T(3,:)=[0 0 0 0 0 1],

通过vec2ind(T)将会得到什么?

因为通过矩阵知道T是6列的,

T =

     0     1     0     0     1     0
     1     0     1     1     0     0
     0     0     0     0     0     1

vec2ind(T)得到的是1行6列的向量,该向量对应的元素分别是T中第1列到第6列中数字"1"对应的行号,因例子中的T矩阵,在第一列中第2行对应的是"1",则vec2ind(T)的第一个元素是2,同理,T中第二列中“1”在第1行,则vec2ind(T)的第二个元素是"1",依次类推,T中第3列至第6列中“1”对应行数分别是“2","2","1","3"。

因此,vec2ind(T)=[2 1 2 2 1 3];


ind2vec则反过来理解即可,如一个索引适量A=[1 3 2 2 2 1 2 1],求ind2vec?

从A可以看出A是1行8列的(如果实在不知道,就用size(A)查看),从A中元素最大值"3"可以看出,索引对应的向量是3行的,还不理解?那就用最基本的方法,因A中元素对应的是行号,设B=ind2vec(A),意味着B(1,1),B(3,2),B(2,3),B(2,4), B(2,5), B(1,6),B(2,7),B(1,8)对应的值是"1",其余元素均为"0"

                 1 0 0 0 0 1 0 1
B=ind2vec(A)=    0 0 1 1 1 0 1 0
                 0 1 0 0 0 0 0 0

 

 

 

神经网络中:

a = sim(net,P)  后运行的结果是:a =

  (10,1)                     %表示输入第1个测试样本数据,10号神经元获胜(我用的是hextop建立的竟争层)
  (10,2)                     %表示输入第2个测试样本数据,10号神经元获胜
   (9,3)                      %表示输入第3个测试样本数据,9号神经元获胜
   (8,4)                         %表示输入第4个测试样本数据,8号神经元获胜
   (8,5)                      。。。。。。
  (29,6)        1
  (40,7)        1
  (50,8)        1
  (60,9)        1
  (60,10)       1

用ac = vec2ind(a)  后可得:
ac =

  Columns 1 through 10

    10    10                29    40    50    60    60      
这样可以更清晰地看出来从第一个样本到最后一个样本,分别是那个神经元获胜。