plKernelTable the variables on
1 /*=============================================================================
2 * File : kernelTable.cpp
3 *=============================================================================
4 *
5 *------------------------- Description ---------------------------------------
6 * This program constructs a plKernelTable.
7 *
8 *-----------------------------------------------------------------------------
9 */
10
11
12 #include <pl.h>
13
14 main()
15 {
16 /**********************************************************************
17 Defining the variable type, set and values
18 ***********************************************************************/
19 plIntegerType Tx(1,5);
20 plRealType Ty(0,120);
21
22 plSymbol x("x",Tx);
23 plSymbol y("y",Ty);
24
25 plValues values(x^y);
26
27 /**********************************************************************
28 Constructing kernel dictionary P( y | x)
29 ***********************************************************************/
30
31 plCUniform Py0(y);
32 plNormal Py1(y,60,10);
33 plNormal Py3(y,50.5,15.5);
34 plGamma Py4(y,70.5,7.2);
35
36 plKernelTable Py(y,x);
37
38 // Pushing the default kernel
39 Py.push_default(Py0);
40
41 // Pushing the pairs (key, kernel)
42 values[x] = 1;
43 Py.push(values,Py1);
44 cout<<"inserting kernel for x= "<<values[x]<<endl;
45
46 values[x] = 3;
47 Py.push(values,Py3);
48 cout<<"inserting kernel for x= "<<values[x]<<endl;
49
50 values[x] = 4;
51 Py.push(values,Py4);
52 cout<<"inserting kernel for x= "<<values[x]<<"\n\n";
53
54 // Print the kernel table
55 cout<<Py<<endl;
56
57 }
inserting kernel for x= 1
inserting kernel for x= 3
inserting kernel for x= 4
P(y | x) = plKernelTable {
1 = P(y | x) = plNormal(y,60,10)
2 = [Default]
3 = P(y | x) = plNormal(y,50.5,15.5)
4 = P(y | x) = plGamma(y, 70.5, 7.2, 0)
5 = [Default]
Default = 0.00833333
}
The access and structure representation are the main differences
between a plKernelMap and a plKernelTable
plKernelMap retrieves an element by a sequential access
(i.e. it is a map like structure) while a
plKernelTable uses a random access (i.e. it is an array like structure).
plKernelMap plKernelTable the variables on
Undoubtedly the choice of using a plKernelMap or a
plKernelTable depends on the application. However, in a general
way a plKernelMap often reduce the requirements of
space whereas a plKernelTable has smaller access time.
A plKernelMap is generally used when a sparse dictionary of
kernels is required: the numbers of keys (i.e. the size of
) is big and a large proportion of them leads to a default
kernel. A plKernelTable always requires of space proportional
to the number of keys. Nevertheless, its access mode is faster that
that of a plKernelMap. A plKernelTable is then generally
used when a dense dictionary of kernel is required: few
of the keys lead to the default kernel.