首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python / numpy:如何沿轴替换指定长度的矩阵元素

Python / numpy:如何沿轴替换指定长度的矩阵元素
EN

Stack Overflow用户
提问于 2018-07-25 03:31:00
回答 1查看 40关注 0票数 0

我有一个数组,它指定沿矩阵的最后一个轴有多少个元素要更改为0。我如何有效地做到这一点呢?

代码语言:javascript
复制
x = np.ones((4, 4, 10))
change_to_zeros = np.random.randint(10, size=(4, 4))
# change_to_zeros = 
# [[2 1 6 8]
# [4 0 4 8]
# [7 6 6 2]
# [4 0 7 1]]

现在我想做的是类似x[:, :, :change_to_zeros] = 0的事情-例如,对于change_to_zeros的第一个元素,我有change_to_zeros[0, 0] = 2,所以我想沿着x(长度为10)的最后一个轴将第一个(或最后一个)2个元素更改为0。

澄清:例如在x[0, 0, :],我有一个长度为10的字符串,我想把其中的2个(change_to_zeros[0, 0] = 2)改为0,其余的保留为1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 03:36:38

您可以使用change_to_zeros[:,:,None] > np.arange(x.shape[-1])创建一个布尔数组(形状与x相同),然后将零分配给_true_s:

代码语言:javascript
复制
x[change_to_zeros[:,:,None] > np.arange(x.shape[-1])] = 0

检查结果:

代码语言:javascript
复制
change_to_zeros[0,0]
# 2

x[0,0]
# array([ 0.,  0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

change_to_zeros[0,2]
# 7

x[0,2]
# array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档