# Element-wise sincosd

**URL:** <https://discourse.julialang.org/t/element-wise-sincosd/82619>\
**Category:** General Usage\
**Tags:** math\
**Created:** [June 12, 2022, 5:39am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619 "2022-06-12T05:39:14Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![markub3327](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markub3327/32/36784_2.png) [@markub3327](https://discourse.julialang.org/u/markub3327)\
**Post date:** [June 12, 2022, 5:39am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/1 "2022-06-12T05:39:14Z")

</div>

Hello,

I have a non-squared matrix with shape (1, 25). I need to calculate element-wise `sincosd`, but I get an error:

```julia
ERROR: LoadError: DimensionMismatch: matrix is not square: dimensions are (1, 25)
Stacktrace:
 [1] checksquare

```

Thanks.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [June 12, 2022, 5:42am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/2 "2022-06-12T05:42:32Z")

</div>

`sincosd.(m)`  
Did you forget the dot?

---

<div class="post-metadata">

**Author:** ![markub3327](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markub3327/32/36784_2.png) [@markub3327](https://discourse.julialang.org/u/markub3327)\
**Post date:** [June 12, 2022, 5:50am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/3 "2022-06-12T05:50:38Z")

</div>

Now I get from (1, 25) matrix a 2 values.

Original matrix: Float32[135.9467 135.34145 132.87178 130.95625 130.62697 135.47206 133.18242 130.9909 130.34097 131.40732 137.59009 134.9275 133.21794 132.04019 133.11278 142.98463 139.56143 137.77008 136.17714 135.66231 145.74803 143.35954 141.51982 139.42064 137.72937]

Result of `sincosd.(M)`: (0.6953272f0, -0.7186933f0)(0.7028803f0, -0.7113081f0)

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [June 12, 2022, 5:57am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/4 "2022-06-12T05:57:43Z")

</div>

`first.(y)`  
`last.(y)`

---

<div class="post-metadata">

**Author:** ![markub3327](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markub3327/32/36784_2.png) [@markub3327](https://discourse.julialang.org/u/markub3327)\
**Post date:** [June 12, 2022, 6:00am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/5 "2022-06-12T06:00:24Z")

</div>

y = sind.(dir)  
x = cosd.(dir)

Works well.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [June 12, 2022, 6:05am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/6 "2022-06-12T06:05:46Z")

</div>

I thought the whole point of using `sincos()` was speed, but I might be wrong.  
_Edit_: _it seems this is just a convenience function for less typing_.

---

<div class="post-metadata">

**Author:** ![markub3327](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markub3327/32/36784_2.png) [@markub3327](https://discourse.julialang.org/u/markub3327)\
**Post date:** [June 12, 2022, 6:13am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/7 "2022-06-12T06:13:58Z")

</div>

The result of `sincos` is: Tuple{Float32, Float32}[(0.7559644, -0.6546127) (0.7291896, -0.68431175) (0.7192175, -0.694785) (0.71985465, -0.6941248) (0.6974216, -0.71666104) (0.69730234, -0.71677715) (0.7080669, -0.70614535) (0.71278906, -0.70137846) (0.70123, -0.7129351) (0.6571556, -0.753755) (0.6404669, -0.76798576) (0.6802382, -0.73299116) (0.6800912, -0.73312753) (0.66833895, -0.74385685) (0.61875427, -0.7855846) (0.5940008, -0.8044644) (0.6333737, -0.7738461) (0.6287631, -0.77759695) (0.6279812, -0.7782285) (0.59531444, -0.80349284) (0.5785256, -0.81566423) (0.5868729, -0.8096791) (0.5875148, -0.8092134) (0.6048421, -0.7963454) (0.5933562, -0.80494)]

But the result of `y = sind.(M), x = cosd.(M)` are 2 matrices of the same size as the original matrix.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [June 12, 2022, 6:16am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/8 "2022-06-12T06:16:30Z")

</div>

As indicated above you could extract those two matrices using first and last. But there is probably a more efficient way

---

<div class="post-metadata">

**Author:** ![vettert](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vettert/32/30599_2.png) [@vettert](https://discourse.julialang.org/u/vettert)\
**Post date:** [June 12, 2022, 6:18am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/9 "2022-06-12T06:18:46Z")

</div>

Does

```julia
x, y = sincosd.(m)

```

work?

---

<div class="post-metadata">

**Author:** ![markub3327](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markub3327/32/36784_2.png) [@markub3327](https://discourse.julialang.org/u/markub3327)\
**Post date:** [June 12, 2022, 6:20am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/10 "2022-06-12T06:20:24Z")

</div>

Result of `x, y = sincosd.(M)` : (0.6953272f0, -0.7186933f0)(0.7028803f0, -0.7113081f0)

It’s not good for me.

---

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [June 12, 2022, 6:30am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/11 "2022-06-12T06:30:41Z")

</div>

No, that only gets the 1st and 2nd element of an iterable, and the iterable is an array of tuples, not the tuple elements:

```julia
julia> z = ((1,1.1), (2,2.2), (3,3.3))
((1, 1.1), (2, 2.2), (3, 3.3))
julia> x, y = z # REPL prints the righthand expression z
((1, 1.1), (2, 2.2), (3, 3.3))
julia> x
(1, 1.1)
julia> y
(2, 2.2)

```

Elementwise `first`, `last`, or `getindex` works:

```julia
julia> first.(z)
(1, 2, 3)
julia> last.(z)
(1.1, 2.2, 3.3)
julia> getindex.(z, 2)
(1.1, 2.2, 3.3)

```

---

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [June 12, 2022, 6:33am UTC](https://discourse.julialang.org/t/element-wise-sincosd/82619/12 "2022-06-12T06:33:37Z")

</div>

`sincosd` specifically is implemented as `sincosd(x) = (sind(x), cosd(x))` in trig.jl, so if separate `sind` and `cosd` matrices is the goal, you save some steps doing `sind.(M)` and `cosd.(M)` separately.
