代码之家  ›  专栏  ›  技术社区  ›  benjimin

食人魔的数据类型是可以指定的吗?

  •  2
  • benjimin  · 技术社区  · 7 年前

    numpy ,为什么 ogrid int64 后果

    int64 由于内存限制(当输出组件稍后一起广播时,内存限制发挥作用)。是否有比事后重铸更好的替代方案:

    y, x = np.ogrid[:9000,:9000]
    y = y.astype(np.int16)
    x = x.astype(np.int16)
    

    对于大多数其他numpy呼叫,更清洁的解决方案是使用 dtype=... 可选参数,但 奥格里德 不是作为函数调用的。相反,它似乎可以与像 a+b ,除了那些通常有其他选择,如 np.add(a,b,dtype=np.int8)

    2 回复  |  直到 7 年前
        1
  •  3
  •   hpaulj    7 年前

    您可以使用生成相同的形状 ix_

    In [476]: np.ix_(np.arange(5,dtype=float),np.arange(5,dtype=np.int16))
    Out[476]: 
    (array([[ 0.],
            [ 1.],
            [ 2.],
            [ 3.],
            [ 4.]]), array([[0, 1, 2, 3, 4]], dtype=int16))
    In [477]: np.ogrid[:5,:5]
    Out[477]: 
    [array([[0],
            [1],
            [2],
            [3],
            [4]]), array([[0, 1, 2, 3, 4]])]
    

    meshgrid 也:

    In [488]: np.meshgrid(np.arange(5, dtype=float), np.arange(5, dtype=np.int16), sparse=True, indexing='ij')
    Out[488]: 
    [array([[ 0.],
            [ 1.],
            [ 2.],
            [ 3.],
            [ 4.]]), array([[0, 1, 2, 3, 4]], dtype=int16)]
    
        2
  •  0
  •   benjimin    7 年前

    np.newaxis 更直接地说:

    y = np.arange(9000, dtype=np.int16)[:,None]
    x = np.arange(9000, dtype=np.int16)[None,:]