Matlab 矩阵的求交
我希望得到结果矩阵。 结果矩阵包含满足条件1的所有“WHO”,且存在WHO.exit,但没有特定顺序。注意:whos.exit中的所有元素都是唯一的,whos的结果(条件1)将给出唯一的whos。您可以使用- 或- 由于Matlab 矩阵的求交,matlab,Matlab,我希望得到结果矩阵。 结果矩阵包含满足条件1的所有“WHO”,且存在WHO.exit,但没有特定顺序。注意:whos.exit中的所有元素都是唯一的,whos的结果(条件1)将给出唯一的whos。您可以使用- 或- 由于whos是一个变量,我建议使用其他变量名作为一个良好的实践。您可以使用- 或- 由于whos是一个变量,我建议使用其他变量名作为一个良好的实践。您可以使用 或者,如果您想要一个二进制数组(不像看上去那么优雅) 或 细节 在中查找索引,其.exit的值在两个数组中 [~,~,i
whos
是一个变量,我建议使用其他变量名作为一个良好的实践。您可以使用-
或-
由于whos
是一个变量,我建议使用其他变量名作为一个良好的实践。您可以使用
或者,如果您想要一个二进制数组(不像看上去那么优雅) 或
细节 在
中查找索引,其.exit
的值在两个数组中
[~,~,iwe]=intersect(whos,whos.exit);
sum((((c1.*whos.exit)./whos.exit(iwe)')==1)')'
ans =
0
0
1
0
1
0
0
0
找到这些值的位置。我只是使用除法,因为一个值除以它本身将显示一个1
,这告诉我们值在哪里。每行表示我们正在查找的值,列表示该值的位置。第一个值(whos.exit(iwe(1))
位于位置3
,第二个值(whos.exit(iwe(2))
位于位置5
[~,~,iwe]=intersect(whos,whos.exit)
iwe =
3
5
我们只需求和并转置它就可以得到二进制数组
(((c1.*whos.exit)./whos.exit(iwe)')==1)'
ans =
0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0
你可以用
或者,如果您想要一个二进制数组(不像看上去那么优雅) 或
细节 在
中查找索引,其.exit
的值在两个数组中
[~,~,iwe]=intersect(whos,whos.exit);
sum((((c1.*whos.exit)./whos.exit(iwe)')==1)')'
ans =
0
0
1
0
1
0
0
0
找到这些值的位置。我只是使用除法,因为一个值除以它本身将显示一个1
,这告诉我们值在哪里。每行表示我们正在查找的值,列表示该值的位置。第一个值(whos.exit(iwe(1))
位于位置3
,第二个值(whos.exit(iwe(2))
位于位置5
[~,~,iwe]=intersect(whos,whos.exit)
iwe =
3
5
我们只需求和并转置它就可以得到二进制数组
(((c1.*whos.exit)./whos.exit(iwe)')==1)'
ans =
0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0
您的数据是单元格还是矩阵?如果是矩阵,你怎么会有空行?矩阵,你说哪些空行?我(错误地)假设你的数据在矩阵中。不是四个独立的变量。如果是这样的话,
whos.exit
的最后三行应该是空的。您的数据是单元格还是矩阵?如果是矩阵,你怎么会有空行?矩阵,你说哪些空行?我(错误地)假设你的数据在矩阵中。不是四个独立的变量。如果是这样的话,whos.exit
的最后三行将是空的bsxfun
版本如何处理756
之后的元素,即whos.exit
的位置是空的?@kkuilla好吧,我在whos.exit
上用转置创建了单态维度。因此,whos
和whos.exit
的长度不必相同。@kkuilla,通过检查每个whos.exit
元素和whos
的每个元素,并接受其中任何一个元素是否为true
,+1代表solution@SanthanSalai我知道这一点,但我的问题更多的是因为我假设数据是在一个矩阵中,而不是在四个独立的值中。这些事情都是在阅读速度过快时发生的。@kkuilla是的,问题有点不清楚。。我是在阅读了divakers的答案loll后才得到这个问题的。bsxfun
版本如何处理756
之后的元素,即whos.exit
在哪里是空的?@kkuilla好吧,我在那里用whos.exit
上的转置创建了单态维度。因此,whos
和whos.exit
的长度不必相同。@kkuilla,通过检查每个whos.exit
元素和whos
的每个元素,并接受其中任何一个元素是否为true
,+1代表solution@SanthanSalai我知道这一点,但我的问题更多的是因为我假设数据是在一个矩阵中,而不是在四个独立的值中。这些事情都是在阅读速度过快时发生的。@kkuilla是的,问题有点不清楚。。我是在读了Divakars的答案后才得到这个问题的。我想你可以使用intersect的第二个输出来得到一个二进制数组,比如result
@Divakar。我没有意识到需要一个二进制数组。我认为这个问题有点不清楚。生成二进制数组的代码比我预期的要复杂一些,但几乎是一行:-)……解释得很好。这可能更容易理解-[~,exclusive\u idx]=setdiff(whos1,whos.exit);out=条件1;out(exclusive_idx)=0
@Divakar是的,我根据你的建议添加了一个更简单的版本。不敢相信我没有看到。我想你可以使用intersect的第二个输出来获得一个二进制数组,比如result
@Divakar。我没有意识到需要一个二进制数组。我认为这个问题有点不清楚。生成二进制数组的代码比我预期的要复杂一些,但几乎是一行:-)……解释得很好。这可能更容易理解-[~,exclusive\u idx]=setdiff(whos1,whos.exit);out=条件1;out(exclusive_idx)=0
@Divakar是的,我根据你的建议添加了一个更简单的版本。真不敢相信我没看到。
[~,~,iwe]=intersect(whos,whos.exit)
iwe =
3
5
(((c1.*whos.exit)./whos.exit(iwe)')==1)'
ans =
0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0
sum((((c1.*whos.exit)./whos.exit(iwe)')==1)')'
ans =
0
0
1
0
1
0
0
0