在Matlab中作为矩阵的第一列访问索引
我有一个计算化学程序(Gaussian09)输出的数据,该程序包含一组力常数数据。数据按索引排列,作为前2-4列(计算二次、三次和四次FC)。作为一个例子,立方体FC看起来像这样,MatLab已经成功地读取了它们,因此我得到了正确的矩阵:在Matlab中作为矩阵的第一列访问索引,matlab,Matlab,我有一个计算化学程序(Gaussian09)输出的数据,该程序包含一组力常数数据。数据按索引排列,作为前2-4列(计算二次、三次和四次FC)。作为一个例子,立方体FC看起来像这样,MatLab已经成功地读取了它们,因此我得到了正确的矩阵: 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 ] 在输入前3列的索引时,我需要一种访问最后3列的方法。类似于 &
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 ]
在输入前3列的索引时,我需要一种访问最后3列的方法。类似于
>>index=find([cube(:,1)==4 && cube(:,2)==3 && cube(:,3)==1]);
这将给我数据的行号,即索引[4 3 1],并允许我读出循环中计算非谐频率所需的值[7]
有没有办法不用一堆循环就能做到这一点
提前感谢,
Ben您已经找到了一种解决方法,在表达式中使用
&
(允许进行非标量比较)
另一种方法是使用ismember
:
index=find(ismember(立方体(:,1:3),[431])代码>
注意,在许多情况下,您甚至可能不需要调用find
:通过比较或ismember
返回的二进制向量可以直接用于索引到另一个数组中。我想出了一个非常不讨人喜欢的方法来解决这个问题:>>index=find([cube(:,1)==4&cube(:,2)==3&cube(:,3)==1)它从[cube…]部分生成一个向量,该部分包含0(如果不匹配)和1(如果匹配),然后在列表中搜索1。由于列表是非重复的(只有一个可能的匹配),因此列表中只有一个1,并且提供了该索引。也许有一天它会帮助其他人,所以我将我所做的发布出来。