Numpy模块中的Meshgrid函数

    科技2022-08-19  151

    环境

    python 3.7 numpy 1.18.4

    函数文档

    numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')[source]

    从坐标向量返回坐标矩阵 给定一维坐标数组x1,x2,…,xn,建立N维坐标数组以对N维网格上的N维标量/矢量场进行矢量化评估。

    参数: x1, x2,…, xn : 数组 表示网格坐标的一维数组

    indexing : 可选 ‘xy’ 或 ‘ij’ Cartesian (‘xy’, default) or matrix (‘ij’) indexing of output. 笛卡尔(默认为“ xy”)或矩阵(“ ij”)的输出索引。

    sparse : 布尔类型 如果为True,则返回一个稀疏网格以节省内存。默认值为False。

    copy : 布尔类型 如果为False,则返回原始数组的视图以节省内存。默认值为True。 需要注意的是,sparse = False,copy = False可能会返回非连续数组。 如果需要写入阵列,需要先进行复制。

    返回值: X1, X2,…, XN :ndarray 对于长度为Ni = len(xi)的向量x1,x2,…,‘xn’,如果indexing ='ij’或(N1, N2, N3,…Nn),则返回(N1, N2, N3,…Nn)形状的数组。 如果indexing ='xy’与xi的元素重复出现,则沿x1的第一个维度填充矩阵,沿x2的第二个维度填充矩阵,依此类推。

    提示:翻译不好,英文原版在numpy.meshgrid

    例子

    官方示例

    函数的技巧性操作

    我想要实现的操作是给定两个(或是多个)数组 输出一个他们中所有元素的组合方式 每个数组中取一个元素构成输出的子数组 (后来才知道这是求集合的笛卡尔积) 例如: 输入:[A,B,C] ,[1,2] 输出:[[A,1],[A,2],[B,1],[B,2],[C,1],[C,2]]

    代码示例:

    import numpy as np x = [1, 2, 3, 4] y = [8, 9, 7] xx= np.array(np.meshgrid(x, y)).T.reshape(-1,2) print(xx) 输出: [[1 8] [1 9] [1 7] [2 8] [2 9] [2 7] [3 8] [3 9] [3 7] [4 8] [4 9] [4 7]]

    输入的数组是几个,就把reshape里的参数2改成几 例如三个:

    print(np.array(np.meshgrid([1, 2, 3], [4, 5], [8, 9, 7])).T.reshape(-1, 3)) [[1 4 8] [1 5 8] [2 4 8] [2 5 8] [3 4 8] [3 5 8] [1 4 9] [1 5 9] [2 4 9] [2 5 9] [3 4 9] [3 5 9] [1 4 7] [1 5 7] [2 4 7] [2 5 7] [3 4 7] [3 5 7]]

    这个方法太难找了

    Processed: 0.014, SQL: 9