【问题标题】:How to reshape array of shape (2, *(x, y)) to (1, *(x,y), 2) while preserving the values of (x, y)?如何在保留 (x, y) 的值的同时将形状 (2, *(x, y)) 的数组重塑为 (1, *(x,y), 2)?
【发布时间】:2019-08-12 16:36:34
【问题描述】:

我想将形状 (2, *(x, y)) 的数组重塑为 (1, *(x,y), 2),同时保留 (x, y) 的值?

(2, *(x,y)) 其中 2 代表游戏画面的帧数,(x, y) 是一个像素值数组。我希望将其转换为形状为(1, *(x, y), 2) 的数组,这样数字 2 仍代表帧索引,而保留(x,y) 数组值。 1 将用于索引批次以训练神经网络。

numpy.reshape(1, *(x,y), 2) 不保留 (x,y) 数组。

【问题讨论】:

标签: python-3.x numpy reshape stack-frame


【解决方案1】:

使用numpy.transpose(),例如:

import numpy as np

arr = np.arange(2 * 3 * 4).reshape((2, 3, 4))
arr.shape
# (2, 3, 4)

arr.transpose(1, 2, 0).shape
# (3, 4, 2)

new_arr = arr.transpose(1, 2, 0)[None, ...]
new_arr.shape
# (1, 3, 4, 2)

# the `(3, 4)` array is preserved:
arr.transpose(1, 2, 0)[:, :, 0] 
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

arr[0, :, :]
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

【讨论】:

  • [None, ...] 是什么意思?还有这三个点代表什么?
  • 相当于np.newaxis,更多关于这个in the official docs
  • 好的,它用于向数组添加新轴,所以我还需要将三个点放在代码中。我对编码很陌生,所以这可能是一个愚蠢的问题。忍受我:)
  • 是的,(所有代码都是有原因的)。这三个点是一个名为 Ellipsis 的内置 Python 对象。
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多