Help with storing data in a 4-D double matrix

조회 수: 1 (최근 30일)
Jake
Jake 2022년 12월 20일
편집: Jake 2022년 12월 21일
I have a data set in the form of 8 columns. I have attached a dummy xlsx file to show the data structure.
As it can be seen, the data set includes [time, frequency, idx, node number, V1, V2, V3, V4]. I'm trying to sort and store these in a way such that I can access V3 values of a particular frequency and of a particular time. Purpose is to be able to access V3 values of a given time/frequency.
What I thought of the structure was something like this.
Re_vx = zeros(length(node_no), 2, length(time), length(frequency));
So I get a matrix in the form of (node_no, V3, time_set, freq_set).
How can I go about this? TIA!

답변 (1개)

Voss
Voss 2022년 12월 20일
How about storing that data set as a table:
t = readtable('new1.xlsx');
t = renamevars(t,t.Properties.VariableNames, ...
{'time','frequency','idx','node_no','V1','V2','V3','V4'})
t = 144×8 table
time frequency idx node_no V1 V2 V3 V4 ______ _________ ___ _______ _________ ________ _________ ________ 1.0472 0.1 1 1 0.2377 0.26627 0.75846 0.31877 1.0472 0.1 1 2 0.60871 0.54889 0.64385 0.088389 1.0472 0.1 1 3 0.82648 0.45033 0.38874 0.16956 1.0472 0.1 1 4 0.29342 0.23107 0.64533 0.44209 1.0472 0.1 1 5 0.26534 0.34716 0.0031364 0.681 1.0472 0.1 1 6 0.75924 0.93866 0.36407 0.27537 1.0472 0.1 1 7 0.0079028 0.33617 0.036416 0.19378 1.0472 0.1 1 8 0.46993 0.47571 0.86852 0.35832 1.0472 0.1 1 9 0.44592 0.90444 0.2673 0.30641 1.0472 0.1 1 10 0.84343 0.07228 0.19927 0.94522 1.0472 0.1 1 11 0.44459 0.078301 0.37323 0.12497 1.0472 0.1 1 12 0.94596 0.50363 0.71822 0.21068 1.0472 0.2 1 1 0.58522 0.48479 0.26291 0.72812 1.0472 0.2 1 2 0.83658 0.77427 0.60219 0.23663 1.0472 0.2 1 3 0.44332 0.1263 0.62431 0.057136 1.0472 0.2 1 4 0.11618 0.84017 0.84411 0.1615
And using logical indexing to get the values at a particular time and frequency:
my_time = t.time(15)
my_time = 1.0472
my_freq = t.frequency(15)
my_freq = 0.2000
result = t(t.time == my_time & t.frequency == my_freq,:)
result = 12×8 table
time frequency idx node_no V1 V2 V3 V4 ______ _________ ___ _______ ________ ________ _______ ________ 1.0472 0.2 1 1 0.58522 0.48479 0.26291 0.72812 1.0472 0.2 1 2 0.83658 0.77427 0.60219 0.23663 1.0472 0.2 1 3 0.44332 0.1263 0.62431 0.057136 1.0472 0.2 1 4 0.11618 0.84017 0.84411 0.1615 1.0472 0.2 1 5 0.1831 0.86732 0.65839 0.53164 1.0472 0.2 1 6 0.090321 0.091064 0.64369 0.63566 1.0472 0.2 1 7 0.24416 0.29224 0.88131 0.76682 1.0472 0.2 1 8 0.54519 0.64255 0.87907 0.47458 1.0472 0.2 1 9 0.10051 0.85658 0.65277 0.45944 1.0472 0.2 1 10 0.87678 0.076611 0.94155 0.34647 1.0472 0.2 1 11 0.59088 0.54855 0.5428 0.99147 1.0472 0.2 1 12 0.31276 0.83399 0.76469 0.8957
result.V3
ans = 12×1
0.2629 0.6022 0.6243 0.8441 0.6584 0.6437 0.8813 0.8791 0.6528 0.9416
  댓글 수: 1
Jake
Jake 2022년 12월 21일
편집: Jake 2022년 12월 21일
Thank you for the response, Voss. This works when I know the specific time or a frequency that I need the V3 values of. But I wanted to get these sorted in a way that I can access them rather easily. For example, say I want to access the V3 values of frequency f1, f2, f3 but within the time t1. If I had the desired matrix (following the dummy image I attached above), those would be val(:,:,1,1), val(:,:,2,1), val(:,:,3,1).
Also, my dataset is pretty large too :( Anyway, thank you so much for the response.
EDIT:
I realized my comment and the question I posted have some contradicting points. What I wanted is to store the values in a matrix in the form of (node_no, V3, time_set, freq_set). So, if I want to get all the V3 values of the 1st time period I can access it simply by Re_vx(:,:,1,:), or at least that's what I imagined. There should be more efficient or better ways to achieve this, and I appreciate any suggestion! :)

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by