簡體   English   中英

Python - AttributeError:'numpy.ndarray'對象沒有屬性'append'

[英]Python - AttributeError: 'numpy.ndarray' object has no attribute 'append'

這關系到我的問題, 在這里

我現在有更新的代碼如下:

import numpy as np
import _pickle as cPickle
from PIL import Image
import sys,os

pixels = []
labels = []
traindata = []
i = 0

directory = 'C:\\Users\\abc\\Desktop\\Testing\\images'
for root, dirs, files in os.walk(directory):
    for file in files:
        floc = file
        im = Image.open(str(directory) + '\\' + floc)
        pix = np.array(im.getdata())
        pixels.append(pix)
        labels.append(1)
        pixels = np.array(pixels)
        labels = np.array(labels)
        traindata.append(pixels)
        traindata.append(labels)
        traindata = np.array([traindata[i][i],traindata[1]], dtype=object)
        i = i + 1

# do the same for validation and test data
# put all data and labels into 'data' array
cPickle.dump(traindata,open('data.pickle','wb'))

FILE = open("data.pickle", 'rb')
content = cPickle.load(FILE)
print (content)

當只有一個圖像時,代碼運行正常。 但是,當我添加另一個或更多圖像時,我得到以下內容:

Traceback (most recent call last):
  File "pickle_data.py", line 17, in <module>
    pixels.append((pix))
AttributeError: 'numpy.ndarray' object has no attribute 'append'

我該如何解決這個問題?

謝謝。

Numpy數組沒有append方法。 使用Numpy追加功能代替:

import numpy as np

array_3 = np.append(array_1, array_2, axis=n)
# you can either specify an integer axis value n or remove the keyword argument completely

例如,如果array_1和array_2具有以下值:

array_1 = np.array([1, 2])
array_2 = np.array([3, 4])

如果在不指定軸值的情況下調用np.append,則如下所示:

array_3 = np.append(array_1, array_2)

array_3將具有以下值:

array([1, 2, 3, 4])

否則,如果你用軸值為0調用np.append,就像這樣:

array_3 = np.append(array_1, array_2, axis=0)

array_3將具有以下值:

 array([[1, 2],
        [3, 4]]) 

有關追加功能的更多信息,請訪問: https//docs.scipy.org/doc/numpy/reference/generated/numpy.append.html

for root, dirs, files in os.walk(directory):
    for file in files:
        floc = file
        im = Image.open(str(directory) + '\\' + floc)
        pix = np.array(im.getdata())
        pixels.append(pix)
        labels.append(1)   # append(i)???

到目前為止還好。 但是,在完成迭代之前,您希望將pixels保留為列表。

pixels = np.array(pixels)
labels = np.array(labels)

你在另一個問題上有這個縮進。 發生了什么? 以前

迭代,在列表中收集值,然后在最后將事物連接成更大的數組是正確的方法。 為了清楚起見,我經常喜歡使用以下符號:

alist = []
for ..
    alist.append(...)
arr = np.array(alist)

如果名稱表明對象的性質,我不太可能像你那樣得到錯誤。

我不明白你想用traindatatraindata 我懷疑你是否需要在循環中構建它。 pixelslabels具有基本信息。

traindata = np.array([traindata[i][i],traindata[1]], dtype=object)

來自上一個問題。 我不確定你理解那個答案。

traindata = []
traindata.append(pixels)
traindata.append(labels)

如果在循環之外完成就是

traindata = [pixels, labels]

labels是一個1d數組,一堆1(或者[0,1,2,3 ...],如果我的猜測是正確的)。 pixels是一個更高維度的數組。 它的形狀是什么?

停在那兒。 將該列表轉換為數組是沒有意義的。 您可以使用pickle保存列表。

您正在復制先前問題的代碼,並且格式錯誤。 cPickle非常大量的數據

append在ndarray上是模棱兩可的; 您要將數據追加到哪個軸? 在不確切知道數據的樣子的情況下,我只能提供一個使用numpy.concatenate的例子,希望對我有所幫助:

import numpy as np

pixels = np.array([[3,3]])
pix = [4,4]
pixels = np.concatenate((pixels,[pix]),axis=0)

# [[3 3]
#  [4 4]]

pixels = np.array(pixels)在此行中重新分配pixels 所以,無論如何它可能不是一個列表。 雖然pixels不是列表,但它沒有append屬性。 是否有意義?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM