在 MATLAB 中从一维数组生成二维数组

发布于 2024-08-20 14:09:09 字数 252 浏览 2 评论 0原文

有谁知道是否有一种方法可以从 1D 数组生成 2D 数组,其中 2D 中的行是通过重复 1D 数组中的相应元素生成的。

IE:

1D array      2D array

  |1|       |1 1 1 1 1|
  |2|       |2 2 2 2 2|
  |3|  ->   |3 3 3 3 3|
  |4|       |4 4 4 4 4|
  |5|       |5 5 5 5 5|

Does anyone know if there is a way to produce a 2D array from a 1D array, where the rows in the 2D are generated by repeating the corresponding elements in the 1D array.

I.e.:

1D array      2D array

  |1|       |1 1 1 1 1|
  |2|       |2 2 2 2 2|
  |3|  ->   |3 3 3 3 3|
  |4|       |4 4 4 4 4|
  |5|       |5 5 5 5 5|

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

萌梦深 2024-08-27 14:09:09

本着奖励答案的精神,以下是我自己的一些答案:

A = (1:5)'

  1. 使用索引[比repmat更快]:

    <前><代码>B = A(:, 个(5,1))

  2. 使用矩阵外积:

    <前><代码>B = A*ones(1,5)

  3. 使用 bsxfun() [不是最好的方法]

    <前> <代码>B = bsxfun(@plus,A,零(1,5))
    %# 或者
    B = bsxfun(@times, A, 个(1,5))

In the spirit of bonus answers, here are some of my own:

Let A = (1:5)'

  1. Using indices [faster than repmat]:

    B = A(:, ones(5,1))
    
  2. Using matrix outer product:

    B = A*ones(1,5)
    
  3. Using bsxfun() [not the best way of doing it]

    B = bsxfun(@plus, A, zeros(1,5))
    %# or
    B = bsxfun(@times, A, ones(1,5))
    
早乙女 2024-08-27 14:09:09

您可以使用 REPMAT 函数来执行此操作:

>> A = (1:5).'

A =

     1
     2
     3
     4
     5

>> B = repmat(A,1,5)

B =

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

<强>编辑:额外答案! ;)

例如,REPMAT 是最直接使用的函数。然而,另一个需要注意的很酷的功能是 KRON,您也可以通过以下方式将其用作解决方案:

B = kron(A,ones(1,5));

对于小向量和矩阵 KRON 可能稍快,但对于较大的矩阵来说,速度要慢一些。

You can do this using the REPMAT function:

>> A = (1:5).'

A =

     1
     2
     3
     4
     5

>> B = repmat(A,1,5)

B =

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

EDIT: BONUS ANSWER! ;)

For your example, REPMAT is the most straight-forward function to use. However, another cool function to be aware of is KRON, which you could also use as a solution in the following way:

B = kron(A,ones(1,5));

For small vectors and matrices KRON may be slightly faster, but it is quite a bit slower for larger matrices.

指尖上得阳光 2024-08-27 14:09:09

repmat(a, [1 n]),但您还应该看看 meshgrid

repmat(a, [1 n]), but you should also take a look at meshgrid.

我们只是彼此的过ke 2024-08-27 14:09:09

您可以尝试类似的操作:

a = [1 2 3 4 5]'
l = size(a)
for i=2:5
    a(1:5, i) = a(1:5)

循环只是不断将列追加到末尾。

You could try something like:

a = [1 2 3 4 5]'
l = size(a)
for i=2:5
    a(1:5, i) = a(1:5)

The loop just keeps appending columns to the end.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文