Matlab 计算所有矩阵列组合之间的差异
我有大约1000列数据。我想创建另一个数组,它包含所有数据行的所有可能的列组合之间的差异。我可以使用for循环来实现它,但是在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
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