是否有可能将以一种方式堆叠的Python数组重新整形为另一种堆叠类型?

时间:2018-06-17 21:06:59

标签: python arrays python-3.x numpy multidimensional-array

我有这个数组:

import numpy as np
shape = (3, 2, 2)
x = np.round(np.random.rand(*shape) * 100)
y = np.round(np.random.rand(*shape) * 100)
z = np.round(np.random.rand(*shape) * 100)
w = np.round(np.random.rand(*shape) * 100)
first_stacked = np.stack((x, y, z, w), axis=0)
print(first_stacked.shape)  # (4, 3, 2, 2)

我想转换成这个数组:

import numpy as np
shape = (3, 2, 2)
x = np.round(np.random.rand(*shape) * 100)
y = np.round(np.random.rand(*shape) * 100)
z = np.round(np.random.rand(*shape) * 100)
w = np.round(np.random.rand(*shape) * 100)
last_stacked = np.stack((x, y, z, w), axis=-1)
print(last_stacked.shape)  # (3, 2, 2, 4)

我试过了:

new_stacked = [i for i in first_stacked]
new_stacked = np.stack(new_stacked, axis=-1)
other_stacked = np.stack(first_stacked, axis=-1)
print(new_stacked.shape)
print(other_stacked.shape)
print(np.array_equal(new_stacked, last_stacked))
print(np.array_equal(new_stacked, other_stacked))

输出:

(3, 2, 2, 4)
(3, 2, 2, 4)
False
True

所以我的两次尝试都没有奏效。我错过了什么?只需reshape上的first_stacked即可完成吗?我担心如果我的阵列太大,如果它不仅仅是重塑,那可能是个问题,尽管我的恐惧可能没有根据。

编辑:我在Jupyter笔记本中将x,y,z,w数组随机化两次,第二个值显然不等于第一个。我道歉。虽然如果有更好的方法,我仍然感兴趣。

所以,工作代码:

import numpy as np
shape = (3, 2, 2)
x = np.round(np.random.rand(*shape) * 100)
y = np.round(np.random.rand(*shape) * 100)
z = np.round(np.random.rand(*shape) * 100)
w = np.round(np.random.rand(*shape) * 100)
first_stacked = np.stack((x, y, z, w), axis=0)
print(first_stacked.shape)
last_stacked = np.stack((x, y, z, w), axis=-1)
print(last_stacked.shape)

new_stacked = [i for i in first_stacked]
new_stacked = np.stack(new_stacked, axis=-1)
other_stacked = np.stack(first_stacked, axis=-1)
print(new_stacked.shape)
print(other_stacked.shape)
print(np.array_equal(new_stacked, last_stacked))
print(np.array_equal(new_stacked, other_stacked))

输出:

(4, 3, 2, 2)
(3, 2, 2, 4)
(3, 2, 2, 4)
(3, 2, 2, 4)
True
True

1 个答案:

答案 0 :(得分:1)

您可以使用{{3}}将第一个轴移动到最后一个位置。

np.moveaxis(first_stacked, 0, -1)

或者您可以将轴滚动到所需的位置

np.rollaxis(first_stacked, 0, first_stacked.ndim)