Hi,
I stumbled over the following behavior of pyopencl broadcasting; when I
run these equivalent operations in pure numpy and with pyopencl arrays,
numpy raises a ValueError while pyopencl does something surprising.
<code>
CL = False # switch between pure numpy and pyopencl
import numpy as n
flotype = n.float32
if CL == True:
import pyopencl as pcl
import pyopencl.array as cl_arr
ctx = pcl.create_some_context()
qu = pcl.CommandQueue(ctx)
def myzeros(shape): return cl_arr.zeros(qu,shape,dtype=flotype)
else:
myzeros = n.zeros
check1 = myzeros((10,))
print(check1)
check2 = myzeros((8,))
print(check2)
check3 =myzeros((5,))
print(check3)
check1 -= check3[0] * check2
print(check1)
</code>
The CL==True version produces:
<output>
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
</output>
while numpy says:
<output>
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
Traceback (most recent call last):
File "pyopencl_bugtest.py", line 25, in <module>
check1 -= check3[0] * check2
ValueError: operands could not be broadcast together with shapes (10)
(8) (10)
</output>
I tend to think numpy is correct here. Or am I missing something? This
is with version 2013.1, my apologies if this behavior has already
changed since release.
Thanks,
sven
_______________________________________________
PyOpenCL mailing list
[email protected]
http://lists.tiker.net/listinfo/pyopencl