Python 将numpy嵌套数组重塑为数组
我有一个numpy数组,形状像Python 将numpy嵌套数组重塑为数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy数组,形状像 a1.shape # 1000 a1[0].shape # (100, 100, 3) 我想用那种方式改变形状 a1.shape # (1000, 100, 100, 3) 我怎样才能做到这一点 只要发布一个解决方案,以防有人需要 x = [] for fname in fl1: x.append( np.array(Image.open(fname))) for i in range(0, len(x)): x[i] = imresize(x[
a1.shape
# 1000
a1[0].shape
# (100, 100, 3)
我想用那种方式改变形状
a1.shape
# (1000, 100, 100, 3)
我怎样才能做到这一点 只要发布一个解决方案,以防有人需要
x = []
for fname in fl1:
x.append( np.array(Image.open(fname)))
for i in range(0, len(x)):
x[i] = imresize(x[i], [100,100], interp='bilinear')
y = np.array(x)
y.shape
列出具有不同形状(但元素数量相同)的数组: 结果是一个对象数据类型数组 但如果我们将列表中的所有元素重塑为相同的形状,我们将得到一个3d数组:
In [75]: np.array([x.reshape(2,3) for x in alist])
Out[75]:
array([[[1, 1, 1],
[1, 1, 1]],
[[0, 0, 0],
[0, 0, 0]],
[[0, 1, 2],
[3, 4, 5]]])
现在,让我们在制作阵列后尝试重塑元素:
In [76]: arr = np.array(alist)
In [77]: arr.shape
Out[77]: (3,)
In [78]: for i in range(3):
...: arr[i] = arr[i].reshape(2,3)
...:
In [79]: arr
Out[79]:
array([array([[1, 1, 1],
[1, 1, 1]]),
array([[0, 0, 0],
[0, 0, 0]]),
array([[0, 1, 2],
[3, 4, 5]])], dtype=object)
In [80]: np.array(arr)
Out[80]:
array([array([[1, 1, 1],
[1, 1, 1]]),
array([[0, 0, 0],
[0, 0, 0]]),
array([[0, 1, 2],
[3, 4, 5]])], dtype=object)
对该数组调用array
不会改变任何东西
但是stack
确实有效(stack
只是连接的一个方便版本):
stack
获取数组列表,或者它是一个数组,在第一维上迭代:
In [83]: np.stack([x for x in arr])
Out[83]:
array([[[1, 1, 1],
[1, 1, 1]],
[[0, 0, 0],
[0, 0, 0]],
[[0, 1, 2],
[3, 4, 5]]])
a1
的所有元素都是相同的形状吗?是的,所有元素都有相同的形状np.stack(a1)
我试过了,但是a1.shape仍然是(1000),在第一次制作x1
时跳过np.array
。收集列表中的数组,并对该列表的元素执行调整大小操作。然后验证形状
。如果列表中的所有元素具有相同的形状,则np.array(x1)
将生成所需的多维数组。除非你做了一些聪明的事情,否则数组的对象数组总是由各种形状组成的。
In [82]: np.stack(arr)
Out[82]:
array([[[1, 1, 1],
[1, 1, 1]],
[[0, 0, 0],
[0, 0, 0]],
[[0, 1, 2],
[3, 4, 5]]])
In [83]: np.stack([x for x in arr])
Out[83]:
array([[[1, 1, 1],
[1, 1, 1]],
[[0, 0, 0],
[0, 0, 0]],
[[0, 1, 2],
[3, 4, 5]]])