如何获取numpy数组中所有非零条目的倒数

问题描述

我试图在numpy数组中取每个非零值的倒数,但搞砸了。假设:

norm = np.arange(0,11)

我想要的是np.array(将零保持在适当的位置)

[ 0,1,0.5,0.33,0.25,0.2,0.17,0.14,0.12,0.11,0.1] 

如果我设置

mask = norm !=0 

我尝试

1/norm[mask]

我收到了预期的结果

[1,0.1] 

但是我试图理解为什么我尝试以下作业

norm[mask] = 1/norm[mask]    

我得到以下numpy数组。

[0,0]

关于这是为什么还是如何实现所需np.array的任何想法?

解决方法

您确定没有意外更改$('.accordion-title').on('click',function() { var content = $(this).next(); $('.accordion-content').not(content).slideUp(400); $('.accordion-title').not(this).removeClass('expanded'); $(this).toggleClass('expanded'); var self = this; content.slideToggle(400,function(e) { $('html,body').animate({scrollTop: $(self).offset().top},100); }); }); 的值。

两者

norm

mask = norm != 0
norm[mask] = 1 / norm[mask]

两者都完全按照您希望他们做的事情去做。我也像您在上方(为什么?)一样,使用左侧的norm[norm != 0] = 1 / norm[norm != 0] 和右侧的mask进行了尝试,效果很好。

按目的编辑:我误读了该示例。我以为原始海报以[0,.5,.333,.25]开头,而不是以[0,1,2,3,4]开头。 Poster不小心创建了一个int64数组而不是一个浮点数组,并且所有内容都向下舍入为零。将其更改为norm != 0

,

另一个选项是使用 numpy.reciprocal 作为记录的 here 和参数 where 如下:

import numpy as np
data = np.reciprocal(data,where= data!=0)

示例:

In[1]: data = np.array([2.0,4.0,0.0])
in[2]: np.reciprocal(data,where=data!=0)
Out[9]: array([0.5,0.25,0.  ])

请注意,此函数不适用于 ints,因此初始化值带有 .0 后缀。 如果您不确定类型,您可以随时使用 data.astype(float64)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...