File Exchange

## Linearly spaced multidimensional matrix without loop

version 1.3.0.0 (2.52 KB) by
Generates a N-dimensional matrix of linearly equally spaced points between the matrices d1 and d2.

Updated 19 May 2014

LINSPACENDIM is a good extension of the Matlab function linspace to any multidimensional elements.
LINSPACENDIM(d1, d2) generates a multi-dimensional
matrix of 100 linearly equally spaced points between
each element of matrices d1 and d2.

LINSPACENDIM(d1, d2, N) generates N points between
each element of matrices X1 and X2.

Example:
d1 = rand(3, 2, 4); d2 = rand(size(d1)); n = 10;

y = linspaceNDim(d1, d2, n) returns a multidimensional matrix y of
size (3, 2, 4, 10)

Class support for inputs X1,X2:
float: Multidimensional matrix, vector, double, single

--> I did not use any Loop! <--

I use an old function that I wrote to make the tensor product of two(2) multidimensional matrices of of any size and any number of dimensions.

### Cite As

Steeve AMBROISE (2021). Linearly spaced multidimensional matrix without loop (https://www.mathworks.com/matlabcentral/fileexchange/22824-linearly-spaced-multidimensional-matrix-without-loop), MATLAB Central File Exchange. Retrieved .

John McDowell

Humam Helfawi

Great!
I just wondering why there is no consistency in the output dimension. If the input is single value the result will be N*1 vector. However, if the input is vector of values, the output will be k*N.
Thanks again for the great work!

Mohammed Salman

Alessandro Masullo

In 2D you can use these simple commands, that are much faster:

A = randi(10,1000,1);
B = randi(10,1000,1)+20;
N = 1500;

dx = (B-A)/(N-1);
AB = repmat(dx,1,N);
AB(:,1) = A;
AB = cumsum(AB,2);

Pawel

I've found this code very helpful. However, there is a minor issue. The output in the case of scalar arguments d1 and d2 is a column vector, while in the case of arguments of higher dimensionality, the output is transposed (it is a matrix consisting of raw vectors, corresponding to each element of the argument). If I'm not clear, just take a look how the output looks like when d1 and d2 are scalars, and when they are vectors 1 by 2.

I corrected the code by adding in the end of the function the following line:

if NDim == 0, y = y'; end

It changes the output of the scalar arguments case a raw vector, consistent with argument of higher dimensionality and with the original linspace function.

Paul

paula

Steeve A.

You're welcome Pio.

Pio Nonus

You saved me a lot of time

Jos (10584)

Youri

Great program!

Jos, you have to change your rating.

Youri.

Jos (10584)

The error indeed seems to be fixed.

Steeve A.

I tried it after modifications. It works perfectly.

Fine.

Jos (10584)

>> linspacendim(0,1)
??? Error using ==> cat
CAT arguments dimensions are not consistent.
Error in ==> LINSPACENDIM at 39
y = cat(NDim+1, Sum1 + Sum2, d2);

This error occurs for every 1-by-N-by-M-... matrix. There are some other issues as well. For instance, in the help:
- LINSPACENDIM or LINSPACEMAT?
- n = 1 in the example?

##### MATLAB Release Compatibility
Created with R2014a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux