我很惊讶地发现在运行MATLAB for循环之间存在以下差异成本:
ksize = 100;
klist = 1:ksize;
tic
for m = 1:100000
for k = 1:ksize
end
end
toc
tic
for m = 1:100000
for k = klist
end
end
toc
Run Code Online (Sandbox Code Playgroud)
唯一的区别是索引列表的创建方式.我怀疑第二个版本会更快,但是!
Elapsed time is 0.055400 seconds.
Elapsed time is 1.695904 seconds.
Run Code Online (Sandbox Code Playgroud)
我的问题有两个:对上述结果负责的是什么,以及在MATLAB编程中这种细微差别(或类似的)发生在哪里?我希望将来能够更好地发现这些低效率.谢谢大家.
我有:
import numpy as np
from mpmath import *
mpf(np.array(range(0,600)))
Run Code Online (Sandbox Code Playgroud)
但它不会让我这样做:
TypeError: cannot create mpf from array
Run Code Online (Sandbox Code Playgroud)
那我该怎么办?
基本上我将使用这个数组,并根据环境(例如1.35626567e1084或6.2345252e-2732)因此需要mpf ,以元素方式乘以非常大或令人难以置信的小数.
更具体地说,我将使用besseli和besselk函数创建令人难以置信的大而令人难以置信的小值.
如何获得一个mpf数组来保存这些数字?
在gnuplot中,使用命令
set term pdf
set out 'filename.pdf'
plot sin(x)
Run Code Online (Sandbox Code Playgroud)
允许我将图像写入pdf.在这样做之后,如何重置输出以便plot sin(x)使用内置的gnuplot显示创建图像(因为它在没有set out首先使用的情况下).
现在我只能通过重启gnuplot来实现这个目标.该reset命令似乎没有帮助.谢谢大家!
我期待mpmath在Python数组上执行元素操作.例如,
import mpmath as mpm
x = mpm.arange(0,4)
y = mpm.sin(x) # error
Run Code Online (Sandbox Code Playgroud)
或者,使用mpmath矩阵
x = mpm.matrix([0,1,2,3])
y = mpm.sin(x) # error
Run Code Online (Sandbox Code Playgroud)
mpmath在这个领域是否有任何能力,或者是否有必要循环参赛作品?
我正在尝试使用一个numpy数组写入.txt文件numpy.savetxt.我可以说,以下代码遵循文档:
z = np.array([1,2,3])
np.savetxt('testdata.txt',z,delimiter='hi')
Run Code Online (Sandbox Code Playgroud)
但是,使用记事本打开的输出文件显示
1.000000000000000000e+002.000000000000000000e+003.000000000000000000e+00
Run Code Online (Sandbox Code Playgroud)
没有hi值之间的分隔符.任何想法为什么会这样?我的目标是在每个值之间添加新行.
我试图简化我的代码,我遇到了一个小问题.让
v = [1; 2; 3];
a1 = [4; 5; 6];
a2 = [7; 8; 9];
A = [a1, a2];
Run Code Online (Sandbox Code Playgroud)
我的目标是计算
u = [v.*a1, v.*a2]
Run Code Online (Sandbox Code Playgroud)
只使用v一次.这可能吗?
有没有将MATLAB的符号表达式转换为可以按元素方式计算的表达式的函数或技术?
例如,命令
a = solve('x^2 + a*x + b == 0')
Run Code Online (Sandbox Code Playgroud)
给出输出
a =
(a^2 - 4*b)^(1/2)/2 - a/2
- a/2 - (a^2 - 4*b)^(1/2)/2
Run Code Online (Sandbox Code Playgroud)
然而,允许a和b成为数组的所需输出是
a =
(a.^2 - 4*b).^(1/2)/2 - a/2
- a/2 - (a.^2 - 4*b).^(1/2)/2
Run Code Online (Sandbox Code Playgroud) 我正在定义一个两个数组,两端都有一个.在MATLAB中,这可以通过以下方式实现
x = [1 2*ones(1,3) 1]
Run Code Online (Sandbox Code Playgroud)
然而,在Python中,numpy提供了一些完全不同的东西:
import numpy
numpy.array([[1],2*numpy.ones(3),[1]])
Run Code Online (Sandbox Code Playgroud)
在Python中执行此MATLAB命令的最有效方法是什么?