问题描述
我试图在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)