在将旧的 Matlab 代码重写为 NumPy 时,我注意到对数计算方面的差异。在 NumPy 中,我使用np.log,Matlab 使用log函数。
b = [1 1 2 3 5 1 1];
p = b ./ sum(b);
sprintf('log(%.20f) = %.20f', p(5), log(p(5)))
Run Code Online (Sandbox Code Playgroud)
import numpy as np
b = np.array([1, 1, 2, 3, 5, 1, 1])
p = b.astype('float64') / np.sum(b)
print(f'log({p[4]:.20f}) = {np.log(p[4]):.20f}')
Run Code Online (Sandbox Code Playgroud)
对于配备 M1 芯片的 MacBook Pro 2020,我发现小数点后第 16 位不匹配。
log(0.35714285714285715079) = -1.02961941718115834732 # Matlab
log(0.35714285714285715079) = -1.02961941718115812527 # NumPy
Run Code Online (Sandbox Code Playgroud)
我想得到完全相同的结果。知道如何修改我的 Python 代码吗?
一点背景:我正在通过O'Reilly的"学习Python"一书学习Python,我有一些Java经验.
无论如何,在阅读第5章(实际上我还在其中)时,我遇到了一个问题,即Python处理混合数字表达式的结果.在该书中,他们使用混合的整数的例子,并且一个浮点数(40 + 3.14),并继续解释说,这个表达式的结果将是一个浮点数因为Python转换操作数达到的类型最复杂的操作数.
我的问题是:代替程序员必须记住哪个数字操作数最高并且记住结果将"升级"到该格式,为结果类型创建特殊的数字文字会不会更简单?
我的逻辑是这样的:如果你的表达式中有一个小数位,你知道它将是一个浮点数,如果你有3 + 4j这样的东西,你知道它将是一个复数.为什么你必须记住数字文字的层次结构只是为了知道你的结果将被视为什么?在我看来,将结果分配给单个不知情的Literal似乎是一个更简单的过程,要知道无论表达式是否具有Mixed Numerics,它都将被视为特定的数据类型.
跟进问题:是否存在目前正在进行此类事情的语言?
同样,我对Python的了解有限,所以这可能是一个愚蠢的问题,但我想知道为什么程序员必须完成这个过程.我可以想象没有某种类型的系统已经存在的唯一原因是,结果的特定数字类型可能不像其他语言(Java)那样重要.
很抱歉问这个简单的问题,但我似乎没有找到任何答案.
如何检查字符串中是否有数字?
我试过了:
$string = "this is a simple string with a number 2432344";
if (preg_match('/[^0-9]/', "$string")) {
echo "yes a number";
} else {
echo "no number";
}
Run Code Online (Sandbox Code Playgroud)
似乎不起作用......
我不确定为什么这个Perl排序不起作用.请建议如何解决此问题.
while (<>) {
chomp;
if (/VIOLATE/) {
@lines = split " ", $_;
#print "$lines[-2]\n"; ## Print last but one column
my @viol = "$lines[-2]\n";
@sorted = sort {$a <=> $b} @viol;
print "@sorted";
}
};
Run Code Online (Sandbox Code Playgroud)
命令: perl test.pl test.log
test.log:
0.98 2.04 -1.106 VIOLATE
0.98 2.04 3.06
0.98 2.04 -11.06 VIOLATE
0.98 2.04 -1.06 VIOLATE
0.98 2.04 1.06
0.98 2.04 -0.226 VIOLATE
0.98 2.04 -2.06 VIOLATE
Run Code Online (Sandbox Code Playgroud) 我在phpMyAdmin上创建了MySQL中的表INVOICES.
CREATE TABLE INVOICES(
INVOICENUMBER NUMERIC(3) NOT NULL PRIMARY KEY,
JOBID NUMERIC(3) NOT NULL,
CURRENTDATE DATE,
CHARGEDETAILS VARCHAR(200),
CHARGESUBTOTAL NUMERIC(3,2) NOT NULL CHECK (CHARGESUBTOTAL >= 0),
GRANDTOTAL NUMERIC(3,2) NOT NULL CHECK (GRANDTOTAL >= 0),
FINALWORKLOG VARCHAR(200),
TERMS VARCHAR(200),
INDEX (JOBID)
);
Run Code Online (Sandbox Code Playgroud)
但是,我在尝试向表中添加记录时遇到了问题.第一个插入命令正确输入所有内容,但第二个命令将数值(CHARGESUBTOTAL和GRANDTOTAL)转换为表中的9.99.我不确定是什么导致了它,所以有人可以帮助我吗?
INSERT INTO INVOICES VALUES (1,1,'2014-11-15','None as the job was cancelled.',0.00,0.00,'The job was cancelled.','None.');
INSERT INTO INVOICES VALUES (2,2,'2014-11-15','£31.80 for total work.',31.80,35.00,'Employee took care of all the expected duties.','Payment should be undertaken within 7 days of receipt.');
Run Code Online (Sandbox Code Playgroud) 我们有一个数据集
ls -1 /opt/test/kortinfo/
1.0.0
1.0.1
1.0.2
1.1.0
1.10.0 // Error
1.2.0
1.3.0
1.4.0
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.9.0
Run Code Online (Sandbox Code Playgroud)
正如我们在这里看到的那样,文件夹1.10.0放错位置,因为它大于1.9.0
我们试图把它管道sort -g,sort -n和sort -ng但也不会正确地显示由它们的数量值排序的文件夹.
ls -1 /opt/test/kortinfo/ | grep -v "siste" | sort -ng
1.0.0
1.0.1
1.0.2
1.1.0
1.10.0 // Still the same error
1.2.0
1.3.0
1.4.0
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.9.0
Run Code Online (Sandbox Code Playgroud)
有谁知道如何通过数值正确排序这些?
我有批处理文件的以下问题.我简化了下面的问题.
运行以下批处理文件foo.bat将返回word标准输出(在本例中为命令提示符窗口),而不是hey.
@SET 1word="hey"
@ECHO %1word%
Run Code Online (Sandbox Code Playgroud)
但是,echo %1word%从命令行执行返回hey.
这应该/可能是这样的原因吗?是否不允许数字为环境变量名称添加前缀?
我发现以下执行这些代码片段有点令人困惑:
BigInteger result = BigInteger.Pow(1000, 1000);
Run Code Online (Sandbox Code Playgroud)
这将编译没有错误但是这个不会:
BigInteger result = (BigInteger)Math.Pow(1000, 1000);
Run Code Online (Sandbox Code Playgroud)
执行BigInteger.Pow()和之间的区别是什么Math.Pow().在这两种情况下我们都是using System.Numerics.
第二个抛出OverflowException BigInteger不能表示无穷大.
是否可以使用dplyr包中的管道进行数值计算?一个简单的例子是:
0.15 %>% 3.8416 * (.*(1-.))/(0.03^2) #does not work
seq(1,10,1) %>% log(.) %>% .^2 #works
Run Code Online (Sandbox Code Playgroud)
想要了解管道如何工作以及什么时候能够和不能使用.我真的很喜欢使用管道功能,并希望找到一种方法将它用于这些类型的数值计算.
非常感谢
我一直在寻找一种在字符串中添加整数的方法,并找到了一些不同的回答说:
String line = "123456789";
int total = 0;
for (int i = 0;i<line.length();i++) {
total += Character.getNumericValue(line.charAt(i));
}
Run Code Online (Sandbox Code Playgroud)
有没有更短的方法这样做,而不是循环通过字符串,它只会将每个字符的数值加起来?