簡體   English   中英

如何阻止numpy meshgrid將默認數據類型設置為int64

[英]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)

...

copybool ,可選

如果為False ,則返回原始數組的視圖以節省內存。 默認為True 請注意, sparse=Falsecopy=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.

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