[英]How do I stop numpy meshgrid from setting the default datatype to int64
我必須使用numpy meshgrid創建一個非常大的網格。 為了節省內存,我使用int8作為我正在嘗試網格化的數組的dtype。 但是,meshgrid不斷將類型更改為使用大量內存的int64。 這是一個問題的簡單例子......
import numpy
grids = [numpy.arange(1, 4, dtype=numpy.int8), numpy.arange(1, 5, dtype=numpy.int8)]
print grids
print grids[0].dtype, grids[0].nbytes
x1, y1 = numpy.meshgrid(*grids)
print x1.dtype, x1.nbytes
打印此腳本
[array([1, 2, 3], dtype=int8), array([1, 2, 3, 4], dtype=int8)]
int8 3
int64 96
為什么meshgrid這樣做? 有什么方法可以阻止它嗎? 我需要創建一個巨大的數組,所以我不能使用meshgrid,除非我可以控制輸出的數據類型。 這是預期的行為還是一個numpy bug? 我在numpy中使用的每個其他函數都保留數據類型或允許您使用dtype參數更改它。 meshgrid函數似乎不允許這樣做。
您可以將numpy.meshgrid()
的可選copy
參數設置為False
(但請注意,它有一些約束):
meshgrid(*xi, **kwargs)
...
copy
:bool
,可選如果為
False
,則返回原始數組的視圖以節省內存。 默認為True
。 請注意,sparse=False
,copy=False
可能會返回非連續數組。 此外,廣播陣列的多於一個元素可以指代單個存儲器位置。 如果需要寫入數組,請先進行復制。
證明它有效:
>>> import numpy
>>>
>>> grids = [numpy.arange(1, 4, dtype=numpy.int8), numpy.arange(1, 5, dtype=numpy.int8)]
>>>
>>> print grids
[array([1, 2, 3], dtype=int8), array([1, 2, 3, 4], dtype=int8)]
>>> print grids[0].dtype, grids[0].nbytes
int8 3
>>>
>>> x1, y1 = numpy.meshgrid(*grids, copy=False)
>>> # ^^^^^^^^^^
>>> print x1.dtype, x1.nbytes
int8 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.