How to Give int-string-int Input as Parameter for Matlab's Matrix?

I would like to have short-hand form about many parameters which I just need to keep fixed in Matlab 2016a because I need them in many places, causing many errors in managing them separately. Code where the signal is 15x60x3 in dimensions

signal( 1:1 + windowWidth/4, 1:1 + windowWidth,: );

Its pseudocode

videoParams = 1:1 + windowWidth/4, 1:1 + windowWidth,: ;
signal( videoParams );

where you cannot write videoParams as string but should I think write ":" as string and everything else as integers. There should be some way to do the pseudocode.

Output of 1:size(signal,3) is 3 so it gives 1:3. I do not get it how this would replace : in the pseudocode.

Extension for horcler's code as function

function videoParams = fix(k, windowWidth)
videoParams = {k:k + windowWidth/4, k:k + windowWidth}; 
end

Test call signal( fix(1,windowWidth){:}, : ) but still unsuccessful giving the error

()-indexing must appear last in an index expression.

so I am not sure if such a function is possible.


How can you make such a int-string-int input for the matrix?

Upvotes: 0

Views: 45

Answers (1)

horchler
horchler

Reputation: 18484

This can be accomplished via comma-separated lists:

signal = rand(15,60,3); % Create random data
windowWidth = 2;
videoParams = {1:1+windowWidth/4, 1:1+windowWidth, 1:size(signal,3)};

Then use the comma-separated list as such:

signal(videoParams{:})

which is equivalent to

signal(1:1+windowWidth/4, 1:1+windowWidth, 1:size(signal,3))

or

signal(1:1+windowWidth/4, 1:1+windowWidth, :)


The colon operator by itself is shorthand for the entirety of a dimension. However, it is only applicable in a direct context. The following is meaningless (and invalid code) as the enclosing cell has no defined size for its third element:

videoParams = {1:1+windowWidth/4, 1:1+windowWidth, :};

To work around this, you could of course use:

videoParams = {1:1+windowWidth/4, 1:1+windowWidth};
signal(videoParams{:},:)

Upvotes: 1

Related Questions