Alright you did not mention "why" before. Anyhow , well as you know convolution coding creates redundancy in code i.e. a rate 1/2 ,length 7, Convolutional Encoder System takes one-bit symbols as inputs and generates 2-bit symbols as outputs. If you assume 3-bit message words as inputs, then the encoder will generate 6-bit codeword outputs.
Now puncturing is a technique used to make a m/n rate code from a "basic" rate 1/2 code. It is done by deletion of some bits in the encoder output. Bits are deleted according to puncturing matrix.
e.g "a puncture pattern to create a rate 3/4 code from the previous rate 1/2 code using the puncture pattern vector [1;1;0;1;1;0]. The ones in the puncture pattern vector indicate that bits in positions 1, 2, 4, and 5 are transmitted, while the zeros indicate that bits in positions 3 and 6 are punctured or removed from the transmitted signal. The effect of puncturing is that now, for every 3 bits of input, the punctured code generates 4 bits of output (as opposed to the 6 bits produced before puncturing). This results in a rate 3/4 code.
So generally it is used to lower down the bitrate as the complexity of a decoder increases rapidly with the code rate. Puncturing is a technique that allows the encoding and decoding of higher rate codes using standard rate 1/2 encoders and decoders.
What the matrix basically does is remove the most useless bits from the pattern based on probability theorem.
I hope this helped !!!