创建 lambda 函数来计算加权平均值并将其发送到字典。
wm = lambda x: np.average(x, weights=df.loc[x.index, 'WEIGHTS'])
# Define a dictionary with the functions to apply for a given column:
f = {'DRESS_AMT': 'max',
'FACE_AMT': 'sum',
'Other_AMT': {'weighted_mean' : wm}}
# Groupby and aggregate with dictionary:
df2=df.groupby(['ID','COL1'], as_index=False).agg(f)
Run Code Online (Sandbox Code Playgroud)
此代码有效,但如果权重总计为 0 ,则加权平均 lambda 函数会失败ZeroDivisionError。在这些情况下,我希望输出“Other_AMT”仅为 0。
我阅读了有关使用 np.ma.average (屏蔽平均值)的文档,但无法理解如何实现它
这种行为有何意义?仅打印编译器警告而不是错误不是更有意义吗?
func main() {
var y float64 = 0.0
var x float64 = 4.0 / y
fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)
+信息
func main() {
var x float64 = 4.0 / 0.0
fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)
prog.go:9:22:除以零
我有以下代码示例:
(type (apply / [5.0 0]))
Run Code Online (Sandbox Code Playgroud)
它引发意外错误 - “除以零”(预期行为:返回 Inf)
可能是由于自动装箱而发生的 - 可以预防吗?
为什么不是1/0 == Inf每种语言?这不是数学上最正确的反应吗?
我熟悉的所有语言都能够表达无限和NaN值,那么为什么他们会选择抛出错误或返回NaN呢?是否只是让科学应用程序开发人员的生活变得更难?;-)
更新:我们应该关闭这个问题,因为我错误地认为1f/0f == Float.NaN在Java中.但我错了:它确实正确回归Float.Infinity.这是我的主要困惑; 只要没有语言返回NaN,一些语言抛出错误的事实是可以理解的.
如果我除以0,我会得到ZeroDivisionError,Infinity或NaN,具体取决于划分的内容.
ruby-1.9.2-p180 :018 > 0.0 / 0
=> NaN
ruby-1.9.2-p180 :020 > 3.0 / 0
=> Infinity
ruby-1.9.2-p180 :021 > 3 / 0
ZeroDivisionError: divided by 0
Run Code Online (Sandbox Code Playgroud)
我知道0.0/0不是无限(用数学术语),而3.0/0是为什么那么为什么不是3/0无穷大?为什么划分整数会引发异常,但划分浮点数不会?
为了防止C#中的DivideByZeroException,人们经常会写出类似的东西
double f(double x) {
if (x != 0.0) return 1000.0/x;
else return 0.0;
}
Run Code Online (Sandbox Code Playgroud)
鉴于浮点运算总是有不精确的事实,我想知道是否保证这个函数永远不会抛出DivideByZeroException.
我在python中有一个Class,具有以下属性:
Run Code Online (Sandbox Code Playgroud)self.number1 = 0 self.number2 = 0 self.divided = self.number1/self.number2
这当然会抛出零误差:
ZeroDivisionError:整数除法或模数为零
这个想法是我稍后会增加number1和number2,但是self.divided会自动更新吗?如果是自动更新,那么如何解决零错误?谢谢.
我正在设计一个界面,向用户显示一个表格,其中包含营销支出和转化营销支出.
表格是这样的:
<table>
<tr>
<th>Spend</th>
<th>Conversions</th>
<th>Cost per Conversion</th>
</tr>
<tr>
<td>$45.92</td>
<td>231</td>
<td>$0.20</td>
</tr>
<tr>
<td>$22.12</td>
<td>0</td>
<td>{{?}}</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
该表由JavaScript填充,可动态计算转换率.
当JS进入第三行时,我最终会显示字符串"Infinity",显示由于除以零而导致的转换率(22.12/0)
我想知道的是,从用户体验的角度来看,我应该在那里展示什么?这些是用户,而不是数学家,因此使用Infinity符号会使它们混淆,使用0会描绘不正确的数据.
我在Theano中使用了一个成本函数,它涉及一个规范化术语,需要我计算这个术语:
T.sum(c / self.squared_euclidean_distances)
Run Code Online (Sandbox Code Playgroud)
由于self.squared_euclidean_distances的某些值可能为零,因此会生成Nan值.我该如何解决这个问题?我尝试使用T.isinf,但没有成功.一种解决方案是将self.squared_euclidean_distances中的零删除为一个小数字,或将T.sum(c/self.squared_euclidean_distances)中的无限数字替换为零.我只是不知道如何在Theano中替换这些值.
我一定在这里做了些蠢事.但我似乎无法弄清楚为什么这个简单的代码不起作用.InputMismatchException有效,但ArithmeticException永远不会被捕获.
import java.util.InputMismatchException;
import java.util.Scanner;
public class SubChap02_DivisionByZero {
public static double quotient(double num, double denum) throws ArithmeticException {
return num / denum;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double num, denum, result;
boolean continueLoop = true;
do {
try {
System.out.printf("Please enter the numerator: ");
num = scanner.nextFloat();
System.out.printf("Please enter the denumerator: ");
denum = scanner.nextFloat();
result = quotient(num, denum);
continueLoop = false;
System.out.printf("THIS: %.2f/%.2f is %.2f\n", num, denum, result);
scanner.close();
} catch …Run Code Online (Sandbox Code Playgroud)