【问题标题】:How to append ND numpy arrays to (N+1)D numpy array through loop?如何通过循环将 ND numpy 数组附加到 (N+1)D numpy 数组?
【发布时间】:2018-11-27 19:50:07
【问题描述】:

例如,我需要将图像创建的 30x30 numpy 数组输入神经网络。如果我有一个要预测的图像目录,我应该能够遍历该目录,获取图像数据并创建一个 (n,30,30) 形状的 np 数组 这是我目前的方法,我打算在喂给模型之前重塑每一行

def get_image_vectors(path):
    img_list=os.listdir(path)
    print(img_list)
    X=np.empty((900,))
    for img_file in img_list:
        img= Image.open(os.path.join(path,img_file))
        img_grey= img.convert("L")
        resized = img_grey.resize((30,30))
        flattened = np.array(resized.getdata())
        # print(flattened.shape)
        X=np.vstack((X,flattened))
        print(img_file,'=>',X.shape)
    return X[1:,:]

【问题讨论】:

  • 那么你的问题是什么?您是否意识到每次调用 vstack 都会创建一个新数组? vstack 与许多数组的列表一样好,如果不是更好的话。另请注意,您必须玩有趣的游戏才能开始,定义“空”数组(根本不像列表[]),然后用[1:]“删除”它。

标签: python arrays numpy


【解决方案1】:

与其追加到现有数组,不如先使用列表,追加到列表,最后转换为数组。从而节省了许多对 np 数组的冗余修改。

这里是一个玩具示例:

import numpy as np

def get_image_vectors():
    X= [] #Create empty list
    for i in range(10):
        flattened = np.zeros(900)
        X.append(flattened) #Append some np array to it
    return np.array(X) #Create array from the list

结果:

array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2019-03-29
    • 2015-11-23
    • 2020-09-14
    • 2019-04-08
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多