Well, no. Your vector `[ cos(t),sin(s),rand()*18]`

gives a 20-dimensional object. Let me try to explain why…

Consider a function from \mathbb{R}^2 \to \mathbb{R}^{20}, i.e., for the sake of argument let’s take a linear one, but you can easily replace it by something non-linear, e.g., some neural network:

```
params = randn(20, 2)
emb(x) = params * x # Note: 2d-input and 20d-output
```

Now, two-dimensional points can be mapped into the 20-dimensional space by `emb`

:

```
points2D = [randn(2) for i=1:10] # 10 2d points
points20D = [emb(x) for x in points2D] # points mapped into 20d
```

Note that even though each point of `points20D`

is 20-dimensional, it is actually determined by two values alone, namely the original 2-dimensional point which was passed through `emb`

. In this sense it is a 2-dimensional structure as it actually only has 2 degrees of freedom, i.e., independent degrees of variation.

Now, when adding noise to that structure, i.e.,

```
noisy_points20D = [x .+ 0.1 * randn(20) for x in points20D]
```

we formally get a 20-dimensional structure as we now have 20 degrees of freedom. (When the noise is small compared to the variation induced by the original 2-dimensional points, we can still consider it close to a 2-dimensional structure though).

In any case, your original vector

```
v = [cos(m), sin(m), rand(1), ..., rand(1)]
```

defines a 19-dimensional structure as only the first two dimensions obey a constraint, i.e., v_1 = \cos(m), v_2 = \sin(m) \; \mathrm{for}\; m \in \mathbb{R}. The other 18 dimensions are all independent and unconstrained.

Thus, in order to define a 3-dimensional structure you need a function taking 3-dimensional inputs to 20-dimensional outputs.

Disclaimer: The above explanation is supposed to give an intuition. I have deliberately avoided terminology such as embedding or manifold which require quite some mathematical background in order to define and understand properly.