Matlab 只需一个for循环即可生成索引,但当您刚接触一种语言时,我始终会给出的一个关键建议是代码的可读性,而不是效率。一旦你让它工作起来,如果你有一些衡量性能的方法,你可以试着让代码更快更有效。这种编程也得到了当地忍者的支持,我是从他们那里得到的

Matlab 只需一个for循环即可生成索引,但当您刚接触一种语言时,我始终会给出的一个关键建议是代码的可读性,而不是效率。一旦你让它工作起来,如果你有一些衡量性能的方法,你可以试着让代码更快更有效。这种编程也得到了当地忍者的支持,我是从他们那里得到的,matlab,for-loop,matrix,Matlab,For Loop,Matrix,因此,您可以尝试以下方法: pairPoints = []; %// Initialize N = 5; %// Highest value in your data for row = 1 : N for col = row + 1 : N pairPoints = [pairPoints; [row col]]; %// Add row-column pair to matrix end end 我们得到了等效输出: pairPoints = 1

因此,您可以尝试以下方法:

pairPoints = []; %// Initialize
N = 5; %// Highest value in your data
for row = 1 : N
    for col = row + 1 : N
        pairPoints = [pairPoints; [row col]]; %// Add row-column pair to matrix
    end
end
我们得到了等效输出:

pairPoints =

 1     2
 1     3
 1     4
 1     5
 2     3
 2     4
 2     5
 3     4
 3     5
 4     5

小警告 仅当数据从
1
枚举到
N
时,此方法才有效


编辑日期:2014年8月20日 您希望将其推广到任何值数组。您还希望坚持使用
for
循环方法。您仍然可以保留原始的
for
循环代码。只需再添加几行即可为新数组编制索引。因此,假设您的数据数组是:

dat = [12, 45, 56, 44, 62]; 
您可以使用
pairPoints
矩阵,并使用每一列对数据数组进行子集化,以访问您的值。此外,您还需要确保数据是列向量,否则这将不起作用。如果我们不这样做,我们将创建一个1D数组并连接行,这显然不是我们想要的。换言之:

dat = [12, 45, 56, 44, 62];
dat = dat(:); %// Make column vector - Important! 
N = numel(dat); %// Total number of elements in your data array
pairPoints = []; %// Initialize

%// Skip if the array is empty
if (N ~= 0)
    for row = 1 : N
        for col = row + 1 : N
            pairPoints = [pairPoints; [row col]]; %// Add row-column pair to matrix
        end
    end

    vals = [dat(pairPoints(:,1)) dat(pairPoints(:,2))];
else
    vals = [];
请注意,我已经做了一个规定,如果数组是空的,甚至不用费心做任何计算。只需输出一个空矩阵

因此,我们得到:

vals =

12    45
12    56
12    44
12    62
45    56
45    44
45    62
56    44
56    62
44    62

我正在删除图像处理标签,因为它不相关。另外,您希望有两对的唯一组合,因此公式实际上是
nchoosek
(暗指@GeoffHayes)。因此,给定要从中选择的
N
项,并一次选择
k
元素,您就有了
N!/(k!*(N-k)!
可能的对。在您的情况下,
N=5
k=2
,因此:
5!/(2!*3!)=10
我正在删除图像处理标签,因为它不相关。另外,您希望有两对的唯一组合,因此公式实际上是
nchoosek
(暗指@GeoffHayes)。因此,给定要从中选择的
N
项,并一次选择
k
元素,您就有了
N!/(k!*(N-k)!
可能的对。在您的情况下,
N=5
k=2
,因此:
5!/(2!*3!)=10
Aha使用下标!:这些是一般的值,如果我想存储一些像这样的矩阵值,那么我应该怎么做,例如我必须为值{12,45,56,44,}配对,然后如何生成那种矩阵,因为上面的代码只从1生成。。。为了实现价值观,请引导我thanks@user3781516那很容易。您只需再添加几行即可。我会更新我的答案。谢谢,它能工作,有一个小问题,如果我们在矩阵中有零值,那么它会给出错误,我应该怎么做?很明显,它不会工作。您需要一个
if
语句,如果没有元素,则跳过此语句。我将再次编辑。啊哈,使用下标!:这些是一般的值,如果我想存储一些像这样的矩阵值,那么我应该怎么做,例如我必须为值{12,45,56,44,}配对,然后如何生成那种矩阵,因为上面的代码只从1生成。。。为了实现价值观,请引导我thanks@user3781516那很容易。您只需再添加几行即可。我会更新我的答案。谢谢,它能工作,有一个小问题,如果我们在矩阵中有零值,那么它会给出错误,我应该怎么做?很明显,它不会工作。您需要一个
if
语句,如果没有元素,则跳过此语句。我会再编辑一次。
pairPoints = []; %// Initialize
N = 5; %// Highest value in your data
for row = 1 : N
    for col = row + 1 : N
        pairPoints = [pairPoints; [row col]]; %// Add row-column pair to matrix
    end
end
pairPoints =

 1     2
 1     3
 1     4
 1     5
 2     3
 2     4
 2     5
 3     4
 3     5
 4     5
dat = [12, 45, 56, 44, 62]; 
dat = [12, 45, 56, 44, 62];
dat = dat(:); %// Make column vector - Important! 
N = numel(dat); %// Total number of elements in your data array
pairPoints = []; %// Initialize

%// Skip if the array is empty
if (N ~= 0)
    for row = 1 : N
        for col = row + 1 : N
            pairPoints = [pairPoints; [row col]]; %// Add row-column pair to matrix
        end
    end

    vals = [dat(pairPoints(:,1)) dat(pairPoints(:,2))];
else
    vals = [];
vals =

12    45
12    56
12    44
12    62
45    56
45    44
45    62
56    44
56    62
44    62