【问题标题】:convert a numpy 3d array to a 1d of 2d arrays [closed]将 numpy 3d 数组转换为 1d 的 2d 数组 [关闭]
【发布时间】:2017-11-02 12:04:23
【问题描述】:

如何将 3D numpy 数组转换为子维度数组? 例如,我有一个形状为 (100,3,3) 的 3D numpy 数组,我想将其转换为 100 个形状为 (3,3) 的 2D 数组的向量?

【问题讨论】:

  • 试图获得更大的图景 - 你为什么需要它?
  • 以防万一您尝试将单元格导入 matlab / octave:stackoverflow.com/questions/38960464/…
  • 正如@Divakar 提到的,你为什么需要它?一个 3d 数组,根据定义,它是 2d 的 1d:S 您可以对 3d numpy 数组执行与 2d 数组列表相同的切片操作。
  • 重点是我想在一个二维数组中加入几个数组(不同维度),我尝试使用 column_stack() 但没有工作。

标签: python numpy


【解决方案1】:

根据this answer,它需要这样才能使单个 3x3 数组成为 savemat 中的单元格元素:

import numpy
A = numpy.zeros((100,3,3))
B = numpy.empty((100,), dtype=numpy.object)
for i in range(100): B[i] = A[i,:,:]

【讨论】:

    【解决方案2】:

    为此,请使用numpy.split 函数。假设你有

    my_array = np.zeros((100, 3, 3))
    

    使用:

    my_new_array = np.split(my_array, 100, axis=0).
    

    从中您将获得一个包含 100 个形状为 (1,3,3) 的数组的数组。如果您想获得包含 (3,3) 数组的列表,只需使用列表推导:

    my_list = [my_array[i] for i in range(np.shape(my_array)[0])]
    

    .

    【讨论】:

    • 或者只是my_list = list(my_array)
    • 我喜欢这个。这更简单。
    • 这会产生一个数组列表,而不是数组数组。
    • my_array 已经是一个数组数组。例如,您可以直接通过my_array[4] 对其进行切片
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2021-12-29
    • 2019-10-31
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2021-05-27
    • 2017-07-27
    相关资源
    最近更新 更多