Python Numpy:在另一个Numpy数组中创建一批Numpy数组(重塑)
我有一个numpy数组Python Numpy:在另一个Numpy数组中创建一批Numpy数组(重塑),python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我有一个numpy数组批的形状(32,5)。批处理的每个元素都由一个numpy数组组成,其中s=[img,val1,val2]是一个三维numpy数组,而\uu只是标量值。 img是一个尺寸为(84,84,3) 我想创建一个形状为(32,84,84,3)的numpy数组。基本上,我想在每个批中提取图像信息,并将其转换为一个4维数组 我尝试了以下方法: b = np.vstack(batch[:,0]) #this yields a b with shape (32,3), type: <c
批的形状(32,5)
。批处理的每个元素都由一个numpy数组组成,其中s=[img,val1,val2]
是一个三维numpy数组,而\uu
只是标量值。
img
是一个尺寸为(84,84,3)
我想创建一个形状为(32,84,84,3)
的numpy数组。基本上,我想在每个批中提取图像信息,并将其转换为一个4维数组
我尝试了以下方法:
b = np.vstack(batch[:,0]) #this yields a b with shape (32,3), type: <class 'numpy.ndarray'>
编辑:
这应该是一个简单的例子:
img = np.zeros([5,5,3])
s = np.array([img,1,1])
batch_elem = np.array([s,1,1,1,1])
batch = np.array([batch_elem for _ in range(32)])
假设我正确理解了问题,您可以在最后一个轴上堆叠两次
res=np.stack(np.stack(batch[:,0])[…,0])
img_batch=np.array([a[i,0]表示范围内的i(a.shape[0]))
应该工作a[0,0]
列表?np.array([a[i,0][0]表示范围内的i(a.shape[0]))
工作。但是有没有一种方法不需要列表理解呢?a[0,0]
是
如果你能构造一个a
的最小示例,最好少一些维度,并提供给我们,那就太好了。至少是您用来构造最小示例的过程。谢谢,我发现这是可行的:np.array([batch[I,0][0]for I in range(batch.shape[0]))
。我正在寻找一个没有列表理解/循环的解决方案。如果可能的话,这真是太神奇了。我被困在这上面很久了:)。看起来不错-它的形状为(32,5,5,3)
s = b[0] #first s of the 32 in batch: shape (3,) , type: <class 'numpy.ndarray'>
img = np.zeros([5,5,3])
s = np.array([img,1,1])
batch_elem = np.array([s,1,1,1,1])
batch = np.array([batch_elem for _ in range(32)])
import numpy as np
# fabricate some data
batch = np.array((32, 1), dtype=object)
for i in range(len(batch)):
batch[i] = [np.random.rand(84, 84, 3), None, None]
# select images
result = np.array([img for img, _, _ in batch])
# double check!
for i in range(len(batch)):
assert np.all(result[i, :, :, :] == batch[i][0])