【问题标题】:Given a 1-d numpy array , convert to a 2-d numpy array of desired shape appending 0给定一个 1-d numpy array ,转换为所需形状的 2-d numpy array 附加 0
【发布时间】:2021-05-16 04:47:35
【问题描述】:

我有一个 numpy 数组: x = np.array([5, 6, 7]) 我想将其转换为具有给定大小的二维数组。例如,假设给定的大小是 5,那么我的结果数组应该是:

[[0 0 0 0 5]
 [0 0 0 0 6]
 [0 0 0 0 7]]

基本上我想将下面的MATLAB代码转换成python:

tmp = [5 6 7];
B(:,5) = tmp

如何通过numpy来实现。

【问题讨论】:

  • 你可以在python中做到这一点,如果你先用B创建np.zeros
  • 我对Python的了解不多,但好像pretty straighforward

标签: python-3.x matlab numpy


【解决方案1】:

MATLAB 可以通过简单地分配一个单元格来创建一个矩阵

>> B(3) = 1
B = 
   0   0   1

并且可以通过分配更多点来增加它。对于创建正确大小的矩阵和分配值来说,这真的很简单。这很方便,但隐藏了实现细节。

numpy 中需要显式创建数组,然后赋值。

In [153]: B = np.zeros((3,5),int)
In [154]: B[:,-1] = [5,6,7]
In [155]: B
Out[155]: 
array([[0, 0, 0, 0, 5],
       [0, 0, 0, 0, 6],
       [0, 0, 0, 0, 7]])

如果您想要一个包含更多列的更大数组数组,您需要创建它,或者将它与另一个数组连接。没有自动数组增长。

【讨论】:

    【解决方案2】:

    假设您的源数据是:

    tmp = [5, 6, 7]  # Source sequence
    colNo = 5        # How many columns should have the target array
    

    你可以得到你的预期结果:

    result = np.pad(np.array(tmp)[:, np.newaxis], ((0, 0), (colNo - 1, 0)))
    

    np.array(tmp) 创建一个 Numpy 数组,[:, np.newaxis] 进行转换 它到一个 columnar 数组。

    有关详细信息,请阅读有关 np.pad 的文档。

    结果是:

    array([[0, 0, 0, 0, 5],
           [0, 0, 0, 0, 6],
           [0, 0, 0, 0, 7]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-11
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多