假设我们有一个大小为(n,2,4)的np.array:
my_array = np.array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
我无法想象如何从前一个数组中获取此数组(大小为(2,2,2,2)),它应该包含来自 my_array <的相同数据/ strong>:
np.array([[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]],
[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]]])
我试过np.expand_dims:
new_array = np.expand_dims(my_array, axis=3)
但我得到了:
array([[[[ 0.],
[ 0.],
[ 0.],
[ 0.]],
[[ 0.],
[ 0.],
[ 0.],
[ 0.]]],
[[[ 0.],
[ 0.],
[ 0.],
[ 0.]],
[[ 0.],
[ 0.],
[ 0.],
[ 0.]]]])
感谢您的支持。
答案 0 :(得分:2)
最简单的方法是使用reshape
执行此任务:
In [2]: my_array.reshape(2,2,2,2)
Out[2]:
array([[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]],
[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]]])
只要有可能,使用reshape
将创建数组的新视图(而不是复制任何基础数据)。在这种特殊情况下,返回具有所需形状和维数的新视图没有任何困难。
如果您对重塑是否会复制数据有任何疑问,一个有用的方法是尝试直接设置数组的.shape
属性:
my_array.shape = (2,2,2,2)
如果在没有复制数据的情况下无法重塑,NumPy将引发错误而不是复制。
答案 1 :(得分:1)
您需要np.reshape
而不是np.expand_dims
:
>>> my_array.reshape(2,2,2,2)
array([[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]],
[[[ 0., 0.],
[ 0., 0.]],
[[ 0., 0.],
[ 0., 0.]]]])
答案 2 :(得分:1)
使用重塑命令:
In [3]: a=np.arange(2*2*4).reshape(2,2,4)
In [4]: a
Out[4]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In [5]: a.reshape(2,2,2,2)
Out[5]:
array([[[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]]],
[[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]]])