A = {{E, 0, 0}, {0, E, 0}, {0, 0, E}};
Using SubsetMap
:
SubsetMap[Log@# &, #, Diagonal@Array[{##} &, Dimensions@#]] &@A
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
Another way, using ArrayRules
and SparseMatrixSparseArray
:
A = {{"a", 0, 0}, {0, E, 0}, {0, 0, E}}; (*@eldo's matrix*)
Normal@SparseArray@(Most@ArrayRules[A] /.
Rule[{i_, i_}, a_ /; NumericQ[a]] :> Rule[{i, i}, Log@a])
{{"a", 0, 0}, {0, 1, 0}, {0, 0, 1}}