Strictly just answering the question, if the object constructed by Array acts like a list, you can copy everything like so:
Z_shared = Array('d', Z.size)
Z_shared[:] = Z.reshape((-1)) # copy entrywise
That seems bad, though. For one thing, the shared array won't have ndarray semantics, and will be a copy. Does it really need to be a single shared variable?
You're splitting into N*N processes in your program, where N can be large. Making a new process can be expensive. You should only split into as many processes as you have cores, I think.
So the idea is, split the data based on the x coordinate, and have one process to deal with the top half of the matrix and the other to deal with the bottom half. Both would be separate arrays in shared memory.
Reading into your question, you should not be playing with multiprocessing in the first place (premature optimization!). Instead, check out sparse matrices: http://docs.scipy.org/doc/scipy/reference/sparse.html