The corollary of numpy.take for setting elements is numpy.put, but unfortunately np.put does not take an axis argument. numpy.put_along_axis exists, but this has the indexing semantics of np.take_along_axis, which is different than what you asked.
I suspect the easiest way to achieve what you have in mind is to use np.take to generate indices that can then be passed to np.put. For example:
>>> a=np.array([[1,2],[3,4]])
>>> i = np.take(np.arange(a.size).reshape(a.shape), 0, axis=0)
>>> np.put(a, i, 10)
>>> print(a)
[[10 10]
[ 3 4]]
Another possibility would be to combine numpy.apply_along_axis with np.put. For example:
>>> a = np.array([[1,2],[3,4]])
>>> np.apply_along_axis(np.put, arr=a, axis=0, ind=0, v=10)
>>> print(a)
[[10 10]
[ 3 4]]
Though please be aware that apply_along_axis is implemented via loops rather than vectorized operations, so it may have poor performance for larger arrays.
put_along_axis was mentioned. Looking at its [source], the key step is
arr[_make_along_axis_idx(arr_shape, indices, axis)] = values
_make_along_axis_index is more involved ,but a key comment is
# build a fancy index, consisting of orthogonal aranges, with the
# requested index inserted at the right location
Those are similar to the broadcastable indexing arrays produced by np.ix_. You can also make an indexing tuple like (0, slice(None)).