【问题标题】:Accessing indexes as first columns of matrix in Matlab在 Matlab 中将索引作为矩阵的第一列访问
【发布时间】:2014-03-05 03:40:30
【问题描述】:

我有一个计算化学程序 (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 列的方法。类似于

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

这会给我作为索引 [4 3 1] 的数据的行号,并允许我读出循环中计算非谐波频率所需的值 [7 7 7]。

有没有办法在没有一堆循环的情况下做到这一点?

提前致谢,

【问题讨论】:

  • 我想出了一个非常不讨人喜欢的方法来解决这个问题:>>index=find([cube(:,1)==4 & cube(:,2)==3 & cube(:, 3)==1]==1) 从 [cube...] 部分生成一个向量,如果不匹配则包含 0,如果匹配则包含 1,然后在列表中搜索 1。由于列表是非重复的(只有一个可能的匹配项),因此列表中只有一个 1 并且提供了该索引。也许有一天它会对其他人有所帮助,所以我发布了我所做的。

标签: matlab


【解决方案1】:

您已经找到了解决此问题的一种方法,即在表达式中使用 &(允许您进行非标量比较)。

另一种方式是使用ismember:

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

请注意,在许多情况下,您甚至可能不需要调用find:比较返回的二进制向量或ismember 可以直接用于索引另一个数组。

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 2016-10-02
    • 2015-11-08
    • 2014-07-17
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多