Dmi*_*kin 2 python arrays numpy
我试图使用多列表来保存来自html的抓取数据
但是在50.000列表附加后我得到了内存错误
所以我决定将列表更改为numpy数组
SapList= []
ListAll = np.array([])
def eachshop(): #filling each list for each shop data
global ListAll
SapList.append(RowNum)
SapList.extend([sap]) # here can be from one to 10 values in one list["sap1","sap2","sap3",...,"sap10"]
SapList.extend([[strLink,ProdName],ProdCode,ProdH,NewPrice, OldPrice,[FileName+'#Komp!A1',KompPrice],[FileName+'#Sav!A1','Sav']])
SapList.extend([ss]) # here can be from null to 80 sublist with 3 values [["id1", "link", "address"],["id80", "link", "address"]]
ListAll = np.append(np.array(SapList))
Run Code Online (Sandbox Code Playgroud)
那么我就是print(ListAll)例外C:\Python36\scrap.py, LINE 307 "ListAll = np.append(np.array(SapList))"): setting an array element with a sequence
现在为了加快我使用pool.map
def makePool(cP, func, iters):
try:
pool = ThreadPool(cP)
#perebiraem Url
pool.map_async(func,enumerate(iters, start=2)).get(99999)
pool.close()
pool.join()
except:
print('Pool Error')
raise
finally:
pool.terminate()
Run Code Online (Sandbox Code Playgroud)
那么如何在我的例子中使用numpy数组并使用Numpy减少内存使用和加速I\O操作?
看起来您正在尝试从包含数字和列表的列表中创建数组.就像是:
In [6]: np.array([1, [1,2],[3,4]])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-812a9ccb6ca0> in <module>()
----> 1 np.array([1, [1,2],[3,4]])
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)
如果列表的所有元素都可以使用它
In [7]: np.array([[1], [1,2],[3,4,5]])
Out[7]: array([list([1]), list([1, 2]), list([3, 4, 5])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
但如果它们的长度不同,则结果是对象数组,而不是2d数字数组.这样的对象dtype数组非常像列表列表,包含指向内存中其他位置的列表的指针.
多维数字数组可以使用比列表列表更少的内存,但如果您需要先创建列表,则无法提供帮助.如果子列表的大小不同,它根本没有帮助.
哦,远离np.append.这是邪恶的.再加上你误用了它!