【问题标题】:Flatten a numpy ndarray array elements to rows of features将 numpy ndarray 数组元素展平为特征行
【发布时间】:2021-01-12 02:27:09
【问题描述】:

我有一个 4D numpy array,其中每列代表 1 个数量,行是数量的统计导数,例如。

[mean mean mean
 std  std  std
 med  med  med]

假设第 1 列代表 speed 第 2 列 acceleration 等。我想将数组的每一列展平,以便将所有可用数量合并成一行特征:

mean std med mean std med mean std med ...

为了澄清我的担忧,我提供以下MWE

input_shape = (1,3,4)
n_sample =20

X = np.random.randint(1, 10, size=(n_sample, )+ input_shape)
X.shape
(20,1,3,4)

所以 X 的前 2 个条目是:

X[:2]
array([[[[1, 7, 7, 8],
         [9, 3, 4, 1],
         [1, 1, 7, 1]]],


       [[[2, 8, 9, 4],
         [8, 4, 2, 7],
         [3, 9, 8, 4]]]])

列代表数量q1, q2, q3, q4,行代表统计数据:mean, std, med 代表每个数组。

然后我想将每个数量的这些统计信息展平为特征行,以便最终结果如下:

  q1_mean q1_std q1_med q2_mean q2_std q2_med q3_mean q3_std q3_med q4_mean q4_std q4_med
     1      9       1      7      3      1      7       4       7      8      1       1
     2      8       3      8      4      9      9       2       8      4      7       4  

所以每个数组都是一个单独的观察值。所以我可以轻松地转换为数据框,添加适当的列头(名称)。

【问题讨论】:

    标签: python arrays numpy multidimensional-array numpy-ndarray


    【解决方案1】:

    如果我理解正确,这应该可以满足您的要求:

    np.transpose(X,(0,1,3,2)).reshape(X.shape[0],-1)
    

    请注意,转置轴 2 和轴 3 是必要的,因为 reshape 将以行优先(C 样式)顺序完成。

    【讨论】:

    • 这实际上是swapaxes的一个很好的用例
    • 是的,swapaxes 也是transpose 的一个很好的替代品。
    • @GilPinsky 您能否评论索引的排序(0,1,3,2)
    • @super_ask 当然。元组有 4 个索引,从 0 到 3,因为 X 有 4 个轴。这意味着返回的ndarray 中的轴 0 将与 X 中一样保持轴 0,轴 1 将与 X 中一样保持轴 1。但是,返回的 ndarray 中的轴 2 现在将是来自 X 的轴 3 和轴 3返回的ndarray 将是轴 2。所以本质上,这意味着您在原始数组 X 中的轴 2 和轴 3 之间交换轴。
    • 有趣,现在我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多