Info

此问题已关闭。 请重新打开它进行编辑或回答。

how to do vector

1 次查看(过去 30 天)
Maria hassan
Maria hassan 2018-3-14
关闭: MATLAB Answer Bot 2021-8-20
Hi,
I have code to run but firstly my data should be balanced panel which I did. however, the second condition is that each variable a N*T vector which I do not know how to do. Could you please advise me how to do this task with thanks
Best regards
  2 个评论
Birdman
Birdman 2018-3-14
Can you share your code?
Maria hassan
Maria hassan 2018-4-7
编辑:Walter Roberson 2018-4-8
Hi
Here is the code:my question is how I enter the series which contains around 10 series since I cannot name all the series same name.
function[x]=pd2(series,N,T)
psi=reshape(series,T,N);
z=psi(2:T,:)-psi(1:T-1,:);
x=reshape(z(2:T-1,:)-z(1:T-2,:),N*(T-2),1);
thanks

回答(1 个)

John BG
John BG 2018-4-7
Hi Maria
the problem is the line
psi=reshape(series,T,N);
inside the function pd2.
reshape only works if the input matrix has exactly N*T elements.
To solve the uncertainty, you can do something like the following:
clear all;close all;clc
N=4;T=5;
series=randi([0 10],1,randi(N*T*2,1))
numel(series)
psi=0;
the previous is just to test it works.
Use something like these 2 ifs: if length of series shorter than N*T, then pad zeros or a value of your choice until you have N*T elements, and then use reshape.
If series has more elements than N*T you have make a decision, a possible policy could be take the N*T initial elements of the input series.
if numel(series)<=N*T % if series length shorter that N*T, add zeros up to N*T
psi=[series zeros(1,N*T-numel(series))]
psi=reshape(psi,T,N);
end
if numel(series)>N*T % if series length larger than N*T,
psi=series([1:N*T])
psi=reshape(psi,T,N);
end
If you find this answer useful would you please be so kind to consider marking my answer as Accepted Answer?
To any other reader, if you find this answer useful please consider clicking on the thumbs-up vote link
thanks in advance for time and attention
John BG
  2 个评论
Maria hassan
Maria hassan 2018-4-7
编辑:Maria hassan 2018-4-7
Hi John,
Many thanks for your reply.
my data is balanced data. I have 18*16=288. but How can I run the code I could not get it. so when I import the data, I import them as matrix and name the matrix as series so it work? I have run it and the results is column with 252 elements but elements from 238 till 252 are NaN. any idea why s that?
Regards Maria
John BG
John BG 2018-4-8
The NaN elements are not a problem for reshape, example
A=[1 NaN 3 7 -1 ; 0 NaN 5 8 11]
A =
1 NaN 3 7 -1
0 NaN 5 8 11
reshape(A,1,10)
=
1 0 NaN NaN 3 5 7 8 -1 11
you see? reshape knows it has to take then into account as if they were values.
As you are pointing out, the input matrix sometimes is not 288, but only 252.
This is why you have to fill up to 288 with more NaN elements, or zeros, or an element you choose convenient.
Add this
if numel(series)<=N*T
psi=[series zeros(1,N*T-numel(series))]
psi=reshape(psi,T,N);
end
to solve when the input is shorter than expected, to allow reshape to work correctly.
Use
if numel(series)>N*T
psi=series([1:N*T])
psi=reshape(psi,T,N);
end
to ignore the excess when the input is larger than the expected size.
Would it be possible for you to show the input data itself?

此问题已关闭。

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by