Matlab 计算所有矩阵列组合之间的差异

Matlab 计算所有矩阵列组合之间的差异,matlab,matrix,combinations,vectorization,bsxfun,Matlab,Matrix,Combinations,Vectorization,Bsxfun,我有大约1000列数据。我想创建另一个数组,它包含所有数据行的所有可能的列组合之间的差异。我可以使用for循环来实现它,但是在MATLAB中有更简单的方法吗 数据的格式如下 Date Col1 Col2 ..... Col1000 . . . . . . . . Date Col1-Col2 Col1-Col3 .... Col1-Col1000 Col2-Col3 Col2-Col4 ..... Col2-Col1

我有大约1000列数据。我想创建另一个数组,它包含所有数据行的所有可能的列组合之间的差异。我可以使用for循环来实现它,但是在MATLAB中有更简单的方法吗

数据的格式如下

Date Col1 Col2 ..... Col1000
.     .   .              . 
.     .   .              .
Date Col1-Col2 Col1-Col3 .... Col1-Col1000 Col2-Col3 Col2-Col4 ..... Col2-Col1000
我需要最终数组的格式如下

Date Col1 Col2 ..... Col1000
.     .   .              . 
.     .   .              .
Date Col1-Col2 Col1-Col3 .... Col1-Col1000 Col2-Col3 Col2-Col4 ..... Col2-Col1000

继续使用
Col999-Col1000
,总共有
nchoosek(1000,2)+1列数据加上日期。

bsxfun
实际上可以在多个维度上复制,从而避免循环(很抱歉,反对者和怨恨选民,这是真的):

这给出了一个p-by-N*N
矩阵,它提供了所有的组合。要获得细化矩阵(即使用
sum(1:N-1)
列),请执行以下操作:

最后,连接日期以获得所需内容:

C = [dates B];

bsxfun
可以在多个维度上进行虚拟复制,从而避免循环(抱歉的反对者和痛苦的选民,这是真的):

这给出了一个p-by-N*N矩阵,它提供了所有的组合。要获得细化矩阵(即使用
sum(1:N-1)
列),请执行以下操作:

最后,连接日期以获得所需内容:

C = [dates B];

所有可能的组合表示也
Col2-Col1,Col2-Col2
等。所有可能的组合表示也
Col2-Col1,Col2-Col2
等。为了通用性,请将
50
替换为第三行中A(大小(A,1))的适当尺寸…谢谢。我必须提醒自己,用这种方式来利用更高的维度。
bsxfun
。你如何从问题所指定的方式中找出差异?@Nirk-有点像你,只是不同而已。。)请看我更新的答案。@rayryeng万岁,为正义而战,在伪造的
查找
/
长度
答案上-必须这样!是的,SheetJS的答案很好,而且比我的内存效率高很多,但我只需要演示一下如何做到这一点他不喜欢这样:D为了通用性,请在第三行中用A(尺寸(A,1))的适当尺寸替换
50
,谢谢。我必须提醒自己,用这种方式来利用更高的维度。
bsxfun
。你如何从问题所指定的方式中找出差异?@Nirk-有点像你,只是不同而已。。)请看我更新的答案。@rayryeng万岁,为正义而战,在伪造的
查找
/
长度
答案上-必须这样!是的,SheetJS的答案很好,而且比我的内存效率高很多,但我只需要演示一下如何做到这一点他不喜欢这样:D