gpt4 book ai didi

python - 如何阻止 numpy meshgrid 将默认数据类型设置为 int64

转载 作者:太空狗 更新时间:2023-10-30 02:55:36 27 4
gpt4 key购买 nike

我必须使用 numpy meshgrid 创建一个非常大的网格。为了节省内存,我使用 int8 作为我尝试网格化的数组的数据类型。但是,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 错误?我在 numpy 中使用的所有其他函数都保留数据类型或允许您使用 dtype 参数更改它。 meshgrid 函数似乎不允许这样做。

最佳答案

您可以设置numpy.meshgrid() 的可选copy 参数到 False(但是请注意,它有一些限制):

meshgrid(*xi, **kwargs)

...

copy : bool, optional

If False, a view into the original arrays are returned in order to conserve memory. Default is True. Please note that sparse=False, copy=False will likely return non-contiguous arrays. Furthermore, more than one element of a broadcast array may refer to a single memory location. If you need to write to the arrays, make copies first.

它有效的证明:

>>> 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

关于python - 如何阻止 numpy meshgrid 将默认数据类型设置为 int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com