Hi,
the mistake is in the last line of your code as you do not have to provide the 'csub_array.vector()' (in fact, csub_array is a numpy vector, which does not even have a 'vector()' attribute, that's why you get the error) but the manipulated 'csub' function instead.
To clarify things, consider the following minimal working example (made in version 2016.1.0):
from dolfin import *
mesh = UnitSquareMesh(5,5)
V = FunctionSpace(mesh, "CG", 1)
W = FunctionSpace(mesh, "CG", 1)
M = MixedFunctionSpace([V,W])
Phi = Function(M)
# Make a deepcopy of the subfunctions
phi, tau = Phi.split(deepcopy = True)
# Manipulate one of the subfunctions
# of course you can also manipulate phi.vector().array() here
val = Expression('1-x[0]')
assign(phi,interpolate(val,V))
# Confirms that the manipulated phi is clearly not assigned to Phi.sub(0):
print 'Before assign', assemble(dot(Phi.sub(0)-phi,Phi.sub(0)-phi)*dx)
# Assign phi to Phi.sub(0):
assign(Phi.sub(0),phi)
print 'After assign', assemble(dot(Phi.sub(0)-phi,Phi.sub(0)-phi)*dx)