【问题标题】:Slicing a numpy array and passing the slice to a function切片一个numpy数组并将切片传递给一个函数
【发布时间】:2018-04-22 00:22:16
【问题描述】:

我想要一个可以对二维 ndarray 的行或列进行操作的函数。假设数组具有 C 顺序。该函数更改 2D 数据中的值。

在函数内部,无论是用行还是列调用,我都希望拥有相同的索引语法。行切片是 [n,:] 和列切片 [:,n] 所以它们有不同的形状。在函数内部,这需要不同的索引表达式。

有没有一种不需要移动或分配内存的方法?我的印象是,使用 reshape 会强制复制数据以使其连续。有没有办法在函数中使用 nditer ?

【问题讨论】:

    标签: numpy multidimensional-array slice reshape


    【解决方案1】:

    你的意思是这样的:

    In [74]: def foo(arr, n):
        ...:     arr += n
        ...:     
    In [75]: arr = np.ones((2,3),int)
    In [76]: foo(arr[0,:],1)
    In [77]: arr
    Out[77]: 
    array([[2, 2, 2],
           [1, 1, 1]])
    In [78]: foo(arr[:,1],[100,200])
    In [79]: arr
    Out[79]: 
    array([[  2, 102,   2],
           [  1, 201,   1]])
    

    在第一种情况下,我将1 添加到数组的一行,即。一个行切片。在第二种情况下,我将数组(列表)添加到列中。在这种情况下,n 必须具有正确的长度。

    通常我们不担心值是否为C contiguous。跨步处理两种方式的访问。

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 2012-09-17
      • 2018-10-09
      • 2015-01-29
      • 1970-01-01
      • 2016-12-19
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多