matlab如何生成矢量图,组合

编程入门 行业动态 更新时间:2024-10-23 06:22:08

matlab如何生成矢量图,<a href=https://www.elefans.com/category/jswz/34/1769978.html style=组合"/>

matlab如何生成矢量图,组合

组合-如何使用矢量化代码从MATLAB中的两个矢量生成所有对?

现在我不止一次需要在MATLAB中生成两个向量的所有可能的对,这是我用for循环完成的,它占用了几行代码,即

vec1 = 1:4;

vec2 = 1:3;

i = 0;

pairs = zeros([4*3 2]);

for val1 = vec1

for val2 = vec2

i = i + 1;

pairs(i,1) = val1;

pairs(i,2) = val2;

end

end

产生...

1 1

1 2

1 3

2 1

2 2

2 3

3 1

3 2

3 3

4 1

4 2

4 3

必须有更好的方法来做到这一点,这更像是MATLAB?

n.b. nchoosek不执行我需要的反向对(即2 1和1 2),我不能仅反向并附加nchoosek输出,因为对称对将被包含两次。

Brendan asked 2020-06-21T08:34:40Z

8个解决方案

92 votes

尝试

[p,q] = meshgrid(vec1, vec2);

pairs = [p(:) q(:)];

请参阅MESHGRID文档。 尽管这并不是该功能的确切用途,但是如果您斜视它很有趣,那么您所要求的正是该功能。

Lambdageek answered 2020-06-21T08:35:07Z

12 votes

您可以使用

a = 1:4;

b = 1:3;

result = combvec(a,b);

result = result'

efirvida answered 2020-06-21T08:35:27Z

3 votes

另一个收集解决方案:

[idx2, idx1] = find(true(numel(vec2),numel(vec1)));

pairs = [reshape(vec1(idx1), [], 1), reshape(vec2(idx2), [], 1)];

yuk answered 2020-06-21T08:35:48Z

3 votes

您可以通过使用repmat复制矩阵,然后使用reshape将结果转换为列向量来实现。

a = 1:4;

b = 1:3;

c = reshape( repmat(a, numel(b), 1), numel(a) * numel(b), 1 );

d = repmat(b(:), length(a), 1);

e = [c d]

e =

1 1

1 2

1 3

2 1

2 2

2 3

3 1

3 2

3 3

4 1

4 2

4 3

当然,您可以摆脱上面示例中的所有中间变量。

Praetorian answered 2020-06-21T08:36:13Z

2 votes

您可以使用普通的旧矩阵运算,例如 在

x = [3,2,1];

y = [11,22,33,44,55];

v = [(ones(length(y),1) * x)(:), (ones(length(x), 1) * y)'(:)]

编辑:这是Octave语法,MATLAB将如下所示:

x = [3,2,1];

y = [11,22,33,44,55];

A = ones(length(y),1) * x;

B = (ones(length(x), 1) * y)';

v = [A(:) B(:)]

在两种情况下,结果都是

v =

3 11

3 22

3 33

3 44

3 55

2 11

2 22

2 33

2 44

2 55

1 11

1 22

1 33

1 44

1 55

jihor answered 2020-06-21T08:36:41Z

1 votes

您正在寻找的是笛卡尔积

cartprod是实现它的函数。 您可以在线性代数包中找到它,因此您需要执行以下操作:

>> pkg install -forge linear-algebra

>> pkg load linear-algebra

>> sortrows(cartprod(1:4,1:3))

ans =

1 1

1 2

1 3

2 1

2 2

2 3

3 1

3 2

3 3

4 1

4 2

4 3

elviejo79 answered 2020-06-21T08:37:06Z

1 votes

这是一种更MATLAB的方式来查找组合。 这个也可以很容易地扩展到2个以上的向量(以及非数字组合):

v1 = 1: 1: 3;

v2 = 11: 11: 44;

v3 = 111:111:555;

dimensions = cellfun(@numel, {v1,v2,v3});

[i1,i2,i3] = ind2sub(dimensions, 1:prod(dimensions));

combinations = [v1(i1); v2(i2); v3(i3)]'

pAtrick answered 2020-06-21T08:37:26Z

1 votes

从版本R2015a开始,您可以使用meshgrid和meshgrid进行此操作:

>> vec1 = 1:4;

>> vec2 = 1:3;

>> pairs = [repelem(vec1(:), numel(vec2)) ...

repmat(vec2(:), numel(vec1), 1)]

pairs =

1 1

1 2

1 3

2 1

2 2

2 3

3 1

3 2

3 3

4 1

4 2

4 3

这种类型的解决方案避免了某些其他解决方案(例如,基于meshgrid的解决方案)所需的其他中间变量,这些变量可能导致较大向量的内存问题。

gnovice answered 2020-06-21T08:37:51Z

更多推荐

matlab如何生成矢量图,组合

本文发布于:2024-03-23 17:03:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740651.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   矢量图   matlab

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!