- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我必须使用 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
, optionalIf
False
, a view into the original arrays are returned in order to conserve memory. Default isTrue
. Please note thatsparse=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/
我有一个函数可以返回点 (x, y) 的密度估计。我想遍历给定二维网格的所有 (x, y) 点,并让密度函数计算每个点的估计值,以便我可以有一个密度值矩阵,然后我可以绘制它。 假设函数被调用 de
我将不一致的数据集更改为一致的数据集。现在我遇到了这个问题:我不明白如何从三个一维数据框列创建轮廓。 我如何将它们网格化以绘制等高线图?这三列是: data_month['Timestamp'], d
我有一个问题,我想绘制矩阵的行列式作为参数的函数,所以我有一个脚本 def f(x, y): DD = np.matrix([[0., 0.],[0., 0.]]) + 0.j ome
如何绘制下表中的数据表面。 第 1 列 - X;第 2 栏 - Y;第 3 列 - Z; 在下面的示例中,X 有 4 个不同点,Y 有 3 个不同点,但我无法预测,每次我都必须分析数据以确定如何将列
我正在尝试根据 x 和 y 点在 python 中网格的特定部分中的位置来标记它们。这些点存储在 Pandas 数据框中。 这里我有一个坐标散点图,在它们上方我正在绘制网格。整个网格更大,从左下点(5
在图像大小调整插值问题中,可以使用 np.meshgrid在对网格索引进行操作之前,在 row 和 col 索引上: nrows = 600 ncols = 800 image_in = np.ran
我正在努力解决与 Matplotlib 和 Numpy 相关的问题。 我正在尝试创建 山体阴影 在我的表面图上。 我的输入数据是 XYZ点的不规则间距源自激光雷达。 我可以生成 trisurf3D 图
我正在尝试创建一个 numpy meshgrid 并将其转换为 Shapely 多边形。我可能可以用一种非常蛮力的方法来解决这个问题,但感觉必须有一个很好的技巧来完成这个,但我还没有想出它。 这让我得
我在 numpy 中有一个网格。我对这些点做了一些计算。我想过滤掉由于某种原因无法计算的点(除以零)。 from numpy import arange, array Xout = arange(-4
我有两个单元格: Months1 = {'F','G','H','J','K','M','N','Q','U','V','X','Z'}; Months2 = 2009:2014; 如何在不运行循环的
我想过滤一个 numpy meshgrid 的值: X,Y = np.mgrid[-10:10,-10:10] 在这种情况下,我想删除 x**2 + y**2 = 2, np.meshgrid[-10
我有形状为 1750 X 1750 的纬度和经度点的 numpy 网格及其相同形状的相应数据(降雨量)。我需要找到落在多边形内的数据点的平均值,从形状文件中读取。 如果我的逻辑是正确的,我必须找出落在
有人可以解释一下 meshgrid 方法吗?我无法全神贯注。该示例来自 [SciPy][1] 站点: import numpy as np nx, ny = (3, 2) x = np.linspac
让我们考虑两个变量 f(x1, x2) 的函数,其中 x1 跨越向量 v1 和 x2 跨越向量 v2。 如果 f(x1, x2) = np.exp(x1 + x2),我们可以通过命令 numpy.me
我在 for 循环中使用 meshgrid 犯了一个错误。让我以下面的代码为例: x=linspace(0,100,100); y=linspace(0,100,100); x0=[0 1 2 3];
我正在开发一个开源代码,它应该有一个一维数组的网格文件。我在 Matlab 中通过 MESHGRID 创建网格,然后使用 FOR 循环按列堆叠数据以创建文件。由于FOR循环,需要很长时间。谁能为我建议
我正在尝试使用给出的示例 here生成我使用的函数的等高线图。我在使用 numpy.meshgrid 与此函数时遇到问题,因为它给出了 ValueError: 设置带有序列的数组元素。因此,我生成了一
我有一些数据 phi,我想用 pcolormesh 绘制它。我的第一个方法是: plt.figure() plt.colormesh(phi) plt.show() 产生: 好。现在我只想稍微调整一下
我的数据框: df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 2, 3], [7, 8, 8]]),columns=['a', 'b', 'c']) df2 =
我想问一下如何从网格中生成相应的值。我有一个函数“foo”,它接受一个长度为 2 的一维数组,并返回一些实数。 import numpy as np def foo(X): #this fu
我是一名优秀的程序员,十分优秀!