how to remove row from 4D matlab matrix

1 次查看(过去 30 天)
Hi I have the following 4D matrix
for idx_number_panels = 1:length(number_panels) % range of PV panel units examined
for number_turbines = 0:2 % range of wind turbine units examined
for number_batteries = 1:10 % range of battery units examined
for h=2:25 %# hours
for d = 1:number_of_days %# which day
n = h + 24*(d-1);
% hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %
hourly_total_RES(idx_number_panels,number_turbines + 1,number_batteries, h,d)
I want to remove the entire row every 24 rows from the above 4D matrix and thus resize the matrix. Is this possible and how can it be done since the documentation doesn't seem to help
Thanks

回答(1 个)

Walter Roberson
Walter Roberson 2012-7-31
Interpreting a bit about which dimension you want to remove over:
hourly_total_RES(:, :, 1:24:end, :) = [];
  4 个评论
Image Analyst
Image Analyst 2012-7-31
Walter's code removes those elements (which would actually be a set of 3D arrays) from the original matrix. Your code would extract those arrays from the original matrix (and leave them there) and save them in a new 4D array you create. So they are different.
You do know that when you specify one dimension of a 4D array as being a certain specific number, that you are then specifying a 3D array, not a row vector, don't you? E.g. M(:,:,42,:) is a 3D array (after you squeeze() it to get rid of the singleton dimension).
Walter Roberson
Walter Roberson 2012-7-31
Only one of the dimensions can be described as being a "row".
Traditionally, MATLAB uses "row" for the first dimension, "column" for the second dimension, and "page" for the third dimension and higher dimensions. Common, though, especially in image processing, is to refer to the third dimension as "plane".
You are using h to access only the third dimension, rather than all of the dimensions, so it does not appear that you want to "remove each 24th row on each dimension".
Talking about "dimension" is like specifying a point in terms of X, Y, Z coordinates, with X being the first dimension, Y being the second dimension, and Z being the third dimension.
You can essentially think of "dimension" in this context as being which index position you are working in: A(X,:,:,:) has X in the first dimension, A(:,X,:,:) has X in the second dimension, and so on.
Ff you are referring to hourly_total_RES(:,:,h,:) and you want to remove every 24th plane (3rd dimension) then you can use
hourly_total_RES(:, :, 1:24:end, :) = [];
This will remove the first plane, the 25th plane, the 49th plane, and so on.
But your reference to 2:25 hints that what you want instead is to remove the first plane, the 26th plane, and so on, which is removing every 25th plane (leaving groups of 24) rather than removing every 24th plane (leaving groups of 23). If so, then
hourly_total_RES(:, :, 1:25:end, :) = [];
The assignment of [] to a particular plane removes that plane from the array.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by