What does '&' mean and do in pytorch Variable?

my pytorch version is 0.3

please read the following code.

# x and y are pytorch Variable, which is 1 or 0 in it.
# x = 
# y =
 
# now we check this
print(type(x))
print(type(y))
print(x.shape)
print(y.shape)

# we get z from x and y.
z = x & y
print(type(z))
print(z.shape)

this code will print the following result:

<class ‘torch.autograd.variable.Variable’>
<class ‘torch.autograd.variable.Variable’>
torch.Size([30, 1, 9])
torch.Size([1, 9, 9])
<class ‘torch.autograd.variable.Variable’>
torch.Size([30, 9, 9])

so, my question is why the shape of z is 3099, after “x & y” ? the shape of x is 3019, and the shape of y is 199, what does “&” do in “x & y”?

the x, y and z is as following.

print('x is as following:')
print(x)
print('y is as following:')
print(y)
print('z is as following:')
print(z)

x is as following:
Variable containing:
(0 ,.,.) =
1 1 1 1 1 1 1 1 1

(1 ,.,.) =
1 1 1 1 1 1 1 1 1

(2 ,.,.) =
1 1 1 1 1 1 1 1 1

(3 ,.,.) =
1 1 1 1 1 1 1 1 1

(4 ,.,.) =
1 1 1 1 1 1 1 1 1

(5 ,.,.) =
1 1 1 1 1 1 1 1 1

(6 ,.,.) =
1 1 1 1 1 1 1 1 1

(7 ,.,.) =
1 1 1 1 1 1 1 1 1

(8 ,.,.) =
1 1 1 1 1 1 1 1 1

(9 ,.,.) =
1 1 1 1 1 1 1 1 1

(10,.,.) =
1 1 1 1 1 1 1 1 1

(11,.,.) =
1 1 1 1 1 1 1 1 1

(12,.,.) =
1 1 1 1 1 1 1 1 1

(13,.,.) =
1 1 1 1 1 1 1 1 1

(14,.,.) =
1 1 1 1 1 1 1 1 1

(15,.,.) =
1 1 1 1 1 1 1 1 1

(16,.,.) =
1 1 1 1 1 1 1 1 1

(17,.,.) =
1 1 1 1 1 1 1 1 1

(18,.,.) =
1 1 1 1 1 1 1 1 1

(19,.,.) =
1 1 1 1 1 1 1 1 1

(20,.,.) =
1 1 1 1 1 1 1 1 1

(21,.,.) =
1 1 1 1 1 1 1 1 1

(22,.,.) =
1 1 1 1 1 1 1 1 1

(23,.,.) =
1 1 1 1 1 1 1 1 1

(24,.,.) =
1 1 1 1 1 1 1 1 1

(25,.,.) =
1 1 1 1 1 1 1 1 1

(26,.,.) =
1 1 1 1 1 1 1 1 1

(27,.,.) =
1 1 1 1 1 1 1 1 1

(28,.,.) =
1 1 1 1 1 1 1 1 1

(29,.,.) =
1 1 1 1 1 1 1 1 1
[torch.ByteTensor of size 30x1x9]

y is as following:
Variable containing:
(0 ,.,.) =
1 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
[torch.ByteTensor of size 1x9x9]

z is as following:
Variable containing:
(0 ,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1

(1 ,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1

(2 ,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1

(27,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1

(28,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1

(29,.,.) =
1 0 0 … 0 0 0
1 1 0 … 0 0 0
1 1 1 … 0 0 0
… ⋱ …
1 1 1 … 1 0 0
1 1 1 … 1 1 0
1 1 1 … 1 1 1
[torch.ByteTensor of size 30x9x9]

Hi , I think you can search for broadcasting in python, hope that helps