假设我想创建一个数组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的回复。
答案 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))
之类的元组。
有一些替代分配函数,例如put
,place
,copyto
,但没有一个看起来像执行此任务。
这些是等价的:
b[0,:] = 1
b.__setitem__((0,slice(None)),1)
也就是说,Python解释器将[]
语法转换为方法调用。
这是就地操作。我不知道有什么事先制作副本。
choose
和where
等函数返回副本,但它们(通常)使用布尔掩码,而不是索引元组。