简体   繁体   中英

Accessing indexes as first columns of matrix in Matlab

I have data that is output from a computational chemistry program (Gaussian09) which contains sets of Force Constant data. The data is arranged with indexes as the first 2-4 columns (quadratic, cubic and quartic FC's are calculated). As an example the cubic FC's look something like this, and MatLab has read them in successfully so I have the correct matrix:

cube=[
1  1  1  5  5  5
1  1  2  6  6  6
.
.
4  1  1  8  8  8
4  2  1  9  9  9
4  3  1  7  7  7 ]

I need a way to access the last 3 columns when feeding in the indices of the first 3 columns. Something along the lines of

>>index=find([cube(:,1)==4 && cube(:,2)==3 && cube(:,3)==1]);

Which would give me the row number of the data that is index [ 4 3 1 ] and allow me to read out the values [7 7 7] which I need within loops to calculate anharmonic frequencies.

Is there a way to do this without a bunch of loops?

Thanks in advance,

Ben

You have already found one way to solve this, by using & in your expression (allowing you to make non-scalar comparisons).

Another way is to use ismember :

index = find(ismember(cube(:,1:3),[4 3 1]));

Note that in many cases, you may not even need the call to find : the binary vector returned by the comparisons or ismember can directly be used to index into another array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM