【发布时间】:2016-10-25 03:56:25
【问题描述】:
有一个数组A,形状为[100,255,255,3],对应100张255*255的图片。我想迭代这个多维数组,每次迭代我都会得到一个图像。这就是我所做的,A1 = A[i,:,:,:] 生成的A1 的形状为[255,255,3]。但是,我想强制它具有[1,255,255,3] 的形状。我该怎么做?
【问题讨论】:
有一个数组A,形状为[100,255,255,3],对应100张255*255的图片。我想迭代这个多维数组,每次迭代我都会得到一个图像。这就是我所做的,A1 = A[i,:,:,:] 生成的A1 的形状为[255,255,3]。但是,我想强制它具有[1,255,255,3] 的形状。我该怎么做?
【问题讨论】:
np.reshape(A1, (1, 255, 255, 3))
应该做的伎俩
【讨论】:
在结果数组上使用np.newaxis。
非常简单的二维数组示例:
x = np.array([[0, 1], [2, 3]])
x.shape
#: (2, 2)
x[np.newaxis]
#: array([[[0, 1],
#: [2, 3]]])
x[np.newaxis].shape
#: (1, 2, 2)
【讨论】:
当然,没问题。使用“重塑”。假设 A1 是一个 numpy 数组
A1 = A1.reshape([1,255,255,3])
这将重塑您的矩阵。
如果 A1 不是 numpy 数组,则使用
A1 = numpy.array(A1).reshape([1,255,255,3])
【讨论】:
答案已经出来了......这里是一个例子,注意你必须仔细看括号来辨别 a 和 b 的尺寸是否不同
>>> a = np.arange(2*2*2*2).reshape(2,2,2,2)
>>> a.ndim
4
>>> b = a.reshape((1,)+a.shape)
>>> b.ndim
5
>>> a
array([[[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]]],
[[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]]])
>>> b
array([[[[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]]],
[[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]]]])
【讨论】:
如果使用:
for a in A: # iteration on the first dimension
a = a[None,...] # add the dim back
# or a.reshape(...)
但如果使用
for i in range(A.shape[0]):
a = A[[i]] # preserve the 1st dim
# or a = A[None,i,...]
但我喜欢使用enumerate 所以:
for i, a in enumerate(A):
a = a[None,...]
但我建议您考虑一下为什么需要最初的 1 维。也许你甚至不需要迭代?
【讨论】: