Python 使用其他字典中的子集数据创建新字典

Python 使用其他字典中的子集数据创建新字典,python,numpy,dictionary,Python,Numpy,Dictionary,我有一本python字典,有两个键image和labelimage是图像像素的numpy数组,label是图像的相应标签(0到9之间的整数)。 我正在尝试创建一个新的字典,其中只包含原始字典中的某些数据,每个标签中只包含50个图像 我的直觉告诉我,有一个简单的方法可以做到这一点,但我现在能想到的唯一方法是做多个for循环 创建原始词典: import tensorflow_datasets as tfds import jax.numpy as jnp ds_builder = tfds.bu

我有一本python字典,有两个键
image
label
image
是图像像素的numpy数组,
label
是图像的相应标签(0到9之间的整数)。 我正在尝试创建一个新的字典,其中只包含原始字典中的某些数据,每个标签中只包含50个图像

我的直觉告诉我,有一个简单的方法可以做到这一点,但我现在能想到的唯一方法是做多个for循环

创建原始词典:

import tensorflow_datasets as tfds
import jax.numpy as jnp

ds_builder = tfds.builder('mnist')
ds_builder.download_and_prepare()

train_ds = tfds.as_numpy(ds_builder.as_dataset(split='train', batch_size=-1))
# Convert to floating-points
train_ds['image'] = jnp.float32(train_ds['image']) / 255.0
我想要的是一个新的
train\u ds2
字典,在
train\u ds

编辑:

我正在添加我的尝试(尽管我认为一定有更好的方法):

t_im=np.零((500,28,28,1))
t_lbl=np.零(500)
对于tqdm中的k(范围(10)):
当我<50时:
对于范围内的j(len(序列号['label']):
如果列车ds[‘标签’][j]==k:
t_im[k*50+i,:,:,:]=train_ds['image'][j,:,:,:,:]
t_lbl[k*50+i]=列车【标签】[j]
i+=1

train\u ds['image']
train\u ds['label']
都是
jaxlib.xla\u extension.DeviceArray
的实例。您可以按如下方式对其进行切片:

随机导入
将jax.numpy作为jnp导入
idx=jnp.array(random.sample(范围(len(train_ds['image'])),50))
训练ds['image'][:50]#从一开始就获得50件物品
训练ds['image'][idx]#获取任意50项
因此,要创建一个新词典,您只需要执行以下操作

列车df\U部件={
“图像”:列车编号[“图像”][:50],
“标签”:列车编号[“标签”][:50]
}
请出示一张照片。
t_im = np.zeros((500,28,28,1))
t_lbl = np.zeros(500)

for k in tqdm(range(10)):
  while i < 50:
    for j in range(len(train_ds['label'])):
      if train_ds['label'][j] == k:
        t_im[k*50 + i,:,:,:] = train_ds['image'][j,:,:,:]
        t_lbl[k*50 + i] = train_ds['label'][j]
    i += 1