【问题标题】:Reshaping a numpy array into desired shape将 numpy 数组重塑为所需的形状
【发布时间】:2020-06-22 21:43:09
【问题描述】:

我在 numpy 中工作,并且有一个 numpy 形式的数组;

[[ 1,  2,  3],
 [ 4,  5,  6],
 [ 7,  8,  9],
 [10, 11, 12],
 [13, 14, 15],
 [16, 17, 18],
 [19, 20, 21],
 [22, 23, 24]]

我只想使用 reshape 和 transpose 函数并获得以下数组:

[[ 1,  2,  3,  7,  8,  9, 13, 14, 15, 19, 20, 21],
 [ 4,  5,  6, 10, 11, 12, 16, 17, 18, 22, 23, 24]]

这可以吗?我已经花了几个小时尝试,开始认为它无法完成 - 我是否遗漏了一些明显的东西?

【问题讨论】:

  • a.reshape(2,-1]?
  • 这不起作用

标签: python numpy matrix reshape numpy-ndarray


【解决方案1】:

你可以重新整形成列,然后转置,然后用类似的东西重新整形:

a = np.array([[ 1,2,3],
 [ 4,5,6],
 [ 7,8,9],
 [10, 11, 12],
 [13, 14, 15],
 [16, 17, 18],
 [19, 20, 21],
 [22, 23, 24]])

a.reshape(-1, 2, 3).transpose((1, 0, 2)).reshape(2, -1)

# array([[ 1,  2,  3,  7,  8,  9, 13, 14, 15, 19, 20, 21],
#        [ 4,  5,  6, 10, 11, 12, 16, 17, 18, 22, 23, 24]])

【讨论】:

  • 我有点困惑...为什么要添加第三维?这可以在没有 3 个维度的情况下完成吗?
  • @JDoe2 也许......但我不知道如何仅使用重塑和转置而不添加另一列来分隔偶数行和奇数行。
  • 扩展块的数量是通常的第一步。源和结果都包含 4 个大小为 (2,3) 的块,只是顺序不同。
【解决方案2】:

您可以尝试对oddeven 进行切片并将它们传递给np.reshape

a_out = np.reshape([a[::2], a[1::2]], (2,-1))

Out[81]:
array([[ 1,  2,  3,  7,  8,  9, 13, 14, 15, 19, 20, 21],
       [ 4,  5,  6, 10, 11, 12, 16, 17, 18, 22, 23, 24]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2018-03-17
    • 2023-02-13
    • 1970-01-01
    • 2017-09-18
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多