There are a few operations like this, e.g. set-inner-product!, add-outer-product! or the various functions in clojure.core.matrix.blas which emulate the equivalent BLAS operations. No fundamental objection to these, though I've tended to include them only in cases where there is a concrete use case to avoid explosion of API functions and/or arity overrides.
Theoretically any operation has three possible variants:
a) Creating a new array for the result (implies allocation overhead, but plays nicely with immutable arguments)
b) Updating one of the arguments in-place with the result (the common case for accumulators etc.)
c) Putting the result in a separate mutable destination array (arguably the most general operation, but requires an extra argument for everything)
The challenge is that c) is complicated by other factors - e.g. do you want to add to the destination array or overwrite whatever is there? This seems to be fairly use case dependent, e.g. for neural networks we do a lot of stuff with accumulators so adding to the destination is often the most natural operation.
I find the following pattern to be quite common:
(assign! dest a)
(mul! dest b)
There is a bit of extra overhead of copying with the first assign, but this is essentially equivalent to (set-product! dest a b). It also nicely handles the cases where dest, a and b are all from different implementations, which I find is quite common in practice (e.g. you will often want to use something like vectorz-clj for mutable destination arrays, but immutable Clojure vectors or Java lists for input data).
I don't think it is a fundamental conflict. We could add a whole bunch of operations like add-xxx! and set-xxx! / assign-xxx!. The trade-off is that it adds API complexity so I've avoided doing this so far for the majority of operations. Also each permutation seems like it would need a separate protocol in order for implementations to make these work efficiently (unless there is some implementation trick I have missed?).
As always, I would be most persuaded by concrete use cases.