Numpy:功能分配?

时间:2016-06-13 10:53:00

标签: numpy

假设我想创建一个数组b,它是a&n;第39行设置为零的数组i的版本。

目前,我必须这样做:

b = a.copy()
b[i, :] = 0

这有点烦人,因为你不能在lambdas中这样做,而numpy中的其他一切都是有用的。我喜欢类似theano' set_subtensor的功能,你可以去哪里

b = a.set_subtensor((i, slice(None)), 0)

b = np.set_subtensor(a, (i, slice(None)), 0)

据我所知,在numpy中没有那样的东西。或者有吗?

修改

答案似乎是否定,没有这样的功能,你需要自己定义一个。请参阅hpaulj的回复。

1 个答案:

答案 0 :(得分:0)

你的意思是这样一个简单的函数:

def subtensor(a, ind, val):
    b=a.copy()
    b[ind] = val
    return b

In [192]: a=np.arange(12).reshape(3,4)

In [194]: subtensor(a,(1,slice(None)),0)
Out[194]: 
array([[ 0,  1,  2,  3],
       [ 0,  0,  0,  0],
       [ 8,  9, 10, 11]])

索引采用(1, slice(None))之类的元组。

有一些替代分配函数,例如putplacecopyto,但没有一个看起来像执行此任务。

这些是等价的:

b[0,:] = 1
b.__setitem__((0,slice(None)),1)

也就是说,Python解释器将[]语法转换为方法调用。

这是就地操作。我不知道有什么事先制作副本。

choosewhere等函数返回副本,但它们(通常)使用布尔掩码,而不是索引元组。