首页 > 解决方案 > 如何访问数组列表列表中的 2D 数组并将它们转换为 3D 数组

问题描述

我读取图像数据集并列出数组列表:

img_all = [[img00, img01, ..., img0n], [img10, img11, ..., img1n], ..., [imgm0, imgm1, ..., imgmn]]

从这个列表中,我想获得 (img00, img10, ..., imgm0), (img01, img11, ..., imgm1), ..., (img0n, img1n, ..., imgmn) 的中值图像.

我可以使用 img_all[i][j] 访问 imgij 但是,如何访问 i 上的所有数组并将它们转换为 3D 数组,以便我可以通过 np.median() 获取它们的中值图像?np.array(img_all[:][j]) 没有返回我想要的。

请注意,imgij 是一个 numpy 2D 数组,图像的形状在 i 处的 j 处是相同的,即

img00, img10,...imgm0 是相同的形状。

img01, img11,...imgm1 是相同的形状。

...,

img0n, img1n,...imgmn 是相同的形状。

下面是我读取图像并想要获取中间图像的代码,但它不起作用,因为我无法根据需要访问数组列表中的数组。任何帮助,将不胜感激!

import numpy as np

def get_image(channel):
    if channel == 0:
        dim0 = 8    
    if channel == 1:
        dim0 = 140
    if channel == 2:
        dim0 = 38
    if channel == 3:
        dim0 = 159        
    return np.random.rand(dim0, 10)

# Read data and make a list of lists of arrays
ndays = range(5)
channels = [0, 1, 2, 3]
img_all = []
for iday in ndays:
    img_channel = []
    for jth_channel in channels:
        img = get_image(jth_channel)
        img_channel.append(img)
    img_all.append(img_channel)

# Get median arrays
medians = []
for j in channels:
    imgs_channel_j = np.array(img_all[:][j]) ### I want to make an array of images for jth channel
    print(imgs_channel_j.shape) # Here I thought I would get an array with the shape of (4, 8, 10) at j=0, (4, 140, 10) at j=1, .... but not.
    img_median = np.median(imgs_channel_j, axis=0)
    medians.append(img_median)

标签: pythonlistnumpy

解决方案


推荐阅读