# Extension of ^-operator for Vector{Vector{Real}}

**URL:** <https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523>\
**Category:** General Usage\
**Tags:** question\
**Created:** [December 23, 2021, 10:15am UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523 "2021-12-23T10:15:20Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Volker](https://avatars.discourse-cdn.com/v4/letter/v/77aa72/32.png) [@Volker](https://discourse.julialang.org/u/Volker)\
**Post date:** [December 23, 2021, 10:15am UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523/1 "2021-12-23T10:15:20Z")

</div>

Hi,

I would like to extend the ^-operator for Vector{Vector{Real}}. I tried the following implementation, but I get an error message :MethodError: no method matching ^(::Vector{Vector{Int16}}, ::Int64).

```julia
import Base:^
Base.:^(vec::Vector{Vector{Real}}, exponent::Real) = for i in 1:length(vec); vec[i] = vec[i].^convert(eltype(eltype(vec)), exponent); end

```

So it seems that method definition isn’t correct. Does somebody know what is wrong? If use the concrete data types e.g. `Vector{Vector{Int16}}` and `Int64` it works.

---

<div class="post-metadata">

**Author:** ![Volker](https://avatars.discourse-cdn.com/v4/letter/v/77aa72/32.png) [@Volker](https://discourse.julialang.org/u/Volker)\
**Post date:** [December 23, 2021, 10:25am UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523/2 "2021-12-23T10:25:27Z")

</div>

This implementation works

```julia
import Base:^
function Base.:^(vec::Vector{Vector{T}}, exponent::S) where {T<:Real, S<:Real}
    vec_tmp = deepcopy(vec)
    for i in 1:length(vec_tmp)
        vec_tmp[i] = vec_tmp[i].^convert(eltype(eltype(vec_tmp)), exponent)
    end
    return vec_tmp
end

```

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [December 23, 2021, 11:03am UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523/4 "2021-12-23T11:03:34Z")

</div>

```julia
[v.^exponent for v in vec] 

```

?  
What you’re doing is type piracy, btw, so not a good idea…

---

<div class="post-metadata">

**Author:** ![Volker](https://avatars.discourse-cdn.com/v4/letter/v/77aa72/32.png) [@Volker](https://discourse.julialang.org/u/Volker)\
**Post date:** [December 23, 2021, 11:18am UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523/5 "2021-12-23T11:18:21Z")

</div>

Ok, thanks for the hint

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [December 23, 2021, 12:39pm UTC](https://discourse.julialang.org/t/extension-of-operator-for-vector-vector-real/73523/6 "2021-12-23T12:39:45Z")

</div>

> [@Volker](#):
>
> `::Vector{Vector{Real}}`

You can just slightly modify this and your original definition should work: replace the above with `::Vector{<:Vector{<:Real}}`.
