Python 为多维数组添加虚拟维度
有一个nd数组Python 为多维数组添加虚拟维度,python,numpy,scipy,Python,Numpy,Scipy,有一个nd数组a,其形状[100255255,3],对应于100255*255个图像。我想迭代这个多维数组,每次迭代我得到一个图像。这就是我所做的,A1=A[I,:,:,::]结果A1具有形状[255255,3]。但是,我想强制它具有形状[1255255,3]。我怎么做 np.reshape(A1, (1, 255, 255, 3)) 应该在生成的数组上使用np.newaxis来完成此操作 二维阵列上非常简单的示例: x = np.array([[0, 1], [2, 3]]) x.shape
a
,其形状[100255255,3]
,对应于100255*255个图像。我想迭代这个多维数组,每次迭代我得到一个图像。这就是我所做的,A1=A[I,:,:,::]
结果A1
具有形状[255255,3]
。但是,我想强制它具有形状[1255255,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.重塑([1255255,3]) 这将重塑你的矩阵 如果A1不是numpy数组,则使用
A1=numpy.array(A1)。重塑([1255255,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,...]
但我喜欢使用枚举
,因此:
for i, a in enumerate(A):
a = a[None,...]
但我鼓励你想想为什么你需要最初的一维空间。也许您甚至不需要迭代?可能重复