1
需要使用.npy
擴展加載多個文件,並將其中的內容寫入新數組。幾個文件的np.load
爲什麼代碼不起作用?我應該改進什麼?
A = np.empty(0)
for file in files:
inf_from_every_file = np.load(file)
A = np.append(A, inf_from_every_file)
需要使用.npy
擴展加載多個文件,並將其中的內容寫入新數組。幾個文件的np.load
爲什麼代碼不起作用?我應該改進什麼?
A = np.empty(0)
for file in files:
inf_from_every_file = np.load(file)
A = np.append(A, inf_from_every_file)
正如已指出了意見,目前尚不清楚你所說的意思是「不工作」。由於files
包含文件名或路徑('a_file.npy'
),並且假設這些文件在當前工作目錄中或在給定路徑中實際存在,您的代碼應該「工作」。
但是,您的代碼會因爲它將flatten
加載的數組並將它們一起追加到一個大的1D數組中。這很可能不是你想要的,所以我會認爲這是你的問題。
要解決這個問題,您需要查看axis
關鍵字np.append
。
但是,在循環中追加numpy數組通常是個壞主意,因爲在每個append
期間都會創建一個完整的數組副本。因此,您應該用一個列表,其後np.concatenate
堅持:
A = []
for fname in files:
inf_from_every_file = np.load(fname)
A.append(inf_from_every_file)
A = np.concatenate(A)
...或者你應該初始化從一開始就對整個空數組,然後通過索引值添加到它:
A = np.empty((len(files),) + np.load(files[0]).shape)
for index,fname in enumerate(files):
A[index,...] = np.load(fname)
請注意,如果您不知道應該加載的數組的形狀,則初始化行A
會變得有點複雜。在這裏,我從列表中加載第一個數組以獲取形狀信息。如果你已經知道形狀是例如(100,100)
,你可以改爲使用
A = np.empty((len(files), 100, 100))
'files'的內容是什麼,你得到的錯誤是什麼?另外,如果你有多個文件的內容要連接成一個大數組,你可能會發現將每個加載的數組附加到一個列表中,然後用['np.concatenate'](https:// docs。 scipy.org/doc/numpy-1.11.0/reference/generated/numpy.concatenate.html)。 – jdehesa
在這樣的循環中使用'np.append'很慢,很難獲得正確的起始值。 'np.empty(0)'不等於列表'[]'。堅持列表追加方法,並處理循環後將這些數組合併成一個。 – hpaulj