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

numpy.fromfunction()的行为

  •  2
  • Mohsen_Fatemi  · 技术社区  · 2 年前

    我试图使用Numpy的创建不同的数组 fromfunction() 。在我遇到这个问题之前,它一直运行良好。我试着用 from函数() (我知道我可以用 ones() full() )问题是:

    array = np.fromfunction(lambda i, j: 1, shape=(2, 2), dtype=float)
    print(array)
    

    令人惊讶的是,这个函数的输出是这样的:

    1
    

    预计为:

    [[1. 1.]
     [1. 1.]]
    

    当我通过添加零次来更改输入函数时 i ,它工作得很好。

    array = np.fromfunction(lambda i, j: i*0 + 1, shape=(2, 2), dtype=float)
    print(array)
    

    此代码的输出为:

    [[1. 1.]
    [1. 1.]]
    

    我的主要问题是如何 from函数() 实际行为?我用两种不同的表示传递了相同的函数,结果完全不同。

    3 回复  |  直到 2 年前
        1
  •  1
  •   lastchance    2 年前

    可调用函数传递两个数组,而不是用两个数字重复调用:

    i=[ [ 0.0, 0.0 ],
        [ 1.0, 1.0 ] ]
    
    j=[ [ 0.0, 1.0 ],
        [ 0.0, 1.0 ] ]
    

    它返回被要求提供的内容。。。只是一次。。。是np.from函数的最终结果。

    所以输入1只返回1 而i*0+1的输入返回

    [ [ 0.0, 0.0 ],
      [ 1.0, 1.0 ] ] * 0 + 1
    

    哪个是(广播)阵列

    [ [ 1.0, 1.0 ],
      [ 1.0, 1.0 ] ]
    
        2
  •  1
  •   Free Palestine    2 年前

    这是函数的定义

    numpy.fromfunction(function, shape, *, dtype=<class 'float'>, like=None, **kwargs)
    

    函数:可调用

    该函数使用N个参数调用,其中N是形状的秩。 每个参数表示沿特定轴变化的阵列坐标 例如,如果shape是(2,2),则参数将是array([0,0],[1,1]])和array([[0,1],[0,1]]

    shape(N,):int元组

    输出数组的形状,它还确定传递给函数的坐标数组的形状。

    返回:fromfunction:any

    对函数的调用结果将直接传回。因此 fromfunction的形状完全由函数决定。如果函数返回标量值,则fromfunction的形状将与形状参数不匹配 .

    重点是我。

    文件 https://numpy.org/doc/stable/reference/generated/numpy.fromfunction.html#numpy-fromfunction

        3
  •  1
  •   Zefick    2 年前

    NumPy fromfunction() 实际上表现得和 function(*np.indices(shape)) 在这种情况下。

    np.indices 返回一个可以与数字相乘和相加的数组。当你相乘 *np.indices((2, 2)) 乘以0,得到一个零数组,然后+1将所有元素加1,但没有乘法运算的结果就是标量1。

    纯属巧合 i 是2*2阵列,并且 j 是一个形状相同但数字不同但lambda不同的数组 i*0+1 仅使用 .