Initializing multidimensional array and dynamic expansion
显示 更早的评论
Hello, I am trying to initialize array 'A' with unspecified dimension and sizes. Then, I proceed to specify the size of each dimension thereby also specifying how many dimensions it has. It looks something like this.
A=[]; %This initialization is wrong, but I want to initialize it somehow
Next, I would like to specify size of dimension and also 'fill entire array with zeros' for preallocation purposes(I have not done that below)
size(A,1)=5; %This means my array A has second dimension of size 5.
size(A,2)=5; %This means my array A has third dimension of size 5.
I have a pattern after this. So I would like to create a 'for' loop like this because number of dimension of my array depends on length of some object 'rho{i}' which is again contained in cell array 'rho' of size 1 by n.
for i=3:(2+n)
size(A,i)=length(rho{i}))
end
So, after this I would like to have 5 dimensional array A(assuming I had 3 objects in my cell array rho) completely filled with zero (pre-allocated)
What I want to learn is how can I automate the indexing here? For ex, if I have a 5D array i dont want to replace all indexing by A(i,i,:,:,:). The code should be generated by just specifying number of objects in my cell array rho. Then I would like to fill my array with numbers. This is just example of 4D array, here I have hardcoded entries for all the dimension. I would like to automate this in the code. Pls note that n, d, k's are all known.
A(1,:,:,:)=[-2*d d zeros(1,n-2) -(k(1)+k(2)) k(2) zeros(1,n-2)];
for i=2:n-1
A(i,i-1,:,:)=d;
A(i,i,:,:)=-3*d;
A(i,i+1,:,:)=d;
A(i,n+i-1,:,:)=k(i);
A(i,n+i,:,:)=-(2*k(i)+k(i+1));
A(i,n+i+1,:,:)=k(i+1);
end
A(n,:,:,:)=[zeros(1,n-2) d -2*d zeros(1,n-2) k(n) -2*k(n)];
Any hint or answer would be hugely helpful. Thank you. If you are unclear about the question, pls ask me!
采纳的回答
更多回答(1 个)
If you know the size you want:
A = zeros(nrow,ncol);
or
A = zeros(nrow, ncol1, ncol2,ncol3);
etc.
Can also initialize to all ones.
A = ones(nrow,ncol);
If you want all the initial values to be 5, then
A = 5*ones(nrow,ncol);
If you want all the intial values to be undefined:
A = nan(nrow,ncol);
And there is a function
padarray
that can be used to expand arrays that have already been partially populated.
You can also use vertcat, horzcat, and simply:
A = [A ones(nmorrows,1)]
and so on
2 个评论
Sandeep Parameshwara
2020-1-14
编辑:Sandeep Parameshwara
2020-1-14
Meg Noah
2020-1-15
padarray can be used to extend your array sizes
or you can append or prepend arrays using, for example,
A = [A zeros(1,ncol)]
maybe if you posted your code, and not just a snippet, it woudld be easier to figure out what you're missing.
类别
在 帮助中心 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!