As a proposal, this is what I would do, given you requirements:
function _scaleRestore!(Z, Zout, shift, stretch)
for j in 1:size(Z, 2), i in 1:size(Z, 1)
Zout[i, j] = Z[i, j] * stretch[j] + shift[j]
end
return Zout
end
scaleRestore!(Z::Vector, shift::Number, stretch::Number) = _scaleRestore!(Z,
Z, shift, stretch)
scaleRestore!(Z::Matrix, shift::Vector, stretch::Vector) = _scaleRestore!(Z,
Z, shift, stretch)
scaleRestore(Z::Vector, shift::Number, stretch::Number) = _scaleRestore!(Z,
similar(Z), shift, stretch)
scaleRestore(Z::Matrix, shift::Vector, stretch::Vector) = _scaleRestore!(Z,
similar(Z), shift, stretch)
I put in both mutating and non-mutating versions, just in case. Single
signature definition I cannot help you with, I'm afraid.