我想通过球体表面上的色彩映射使用Matplotlib绘制数据.另外,我想添加一个3D线图.我到目前为止的代码是这样的:
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
NPoints_Phi = 30
NPoints_Theta = 30
radius = 1
pi = np.pi
cos = np.cos
sin = np.sin
phi_array = ((np.linspace(0, 1, NPoints_Phi))**1) * 2*pi
theta_array = (np.linspace(0, 1, NPoints_Theta) **1) * pi
phi, theta = np.meshgrid(phi_array, theta_array)
x_coord = radius*sin(theta)*cos(phi)
y_coord = radius*sin(theta)*sin(phi)
z_coord = radius*cos(theta)
#Make colormap the fourth dimension
color_dimension = x_coord
minn, maxx = color_dimension.min(), color_dimension.max()
norm = matplotlib.colors.Normalize(minn, maxx)
m …Run Code Online (Sandbox Code Playgroud) 在Numpy中评估表达式时,我发现了一个奇怪的性能差异.
我执行了以下代码:
import numpy as np
myarr = np.random.uniform(-1,1,[1100,1100])
Run Code Online (Sandbox Code Playgroud)
然后
%timeit np.exp( - 0.5 * (myarr / 0.001)**2 )
>> 184 ms ± 301 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
Run Code Online (Sandbox Code Playgroud)
和
%timeit np.exp( - 0.5 * (myarr / 0.1)**2 )
>> 12.3 ms ± 34.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,计算速度提高了近15倍!请注意,唯一的区别是因子为0.1或0.001.
这种行为的原因是什么?我可以更改某些内容以使第一次计算与第二次计算一样快吗?
更新numpy到版本1.14.1后,执行任何命令(例如键入1+1)后,我收到以下警告消息:
/home/username/anaconda3/lib/python3.6/site-packages/numpy
/core/_methods.py:26: RuntimeWarning: invalid value encountered in reduce
return umr_maximum(a, axis, None, out, keepdims)
Run Code Online (Sandbox Code Playgroud)
现在有人问题是什么以及如何解决它?
当我执行以下代码时
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import Rbf
x_coarse, y_coarse = np.mgrid[0:5, 0:5]
x_fine, y_fine = np.mgrid[1:4:0.23,1:4:0.23]
data_coarse = np.ones([5,5])
rbfi = Rbf(x_coarse.ravel(), y_coarse.ravel(), data_coarse.ravel())
interpolated_data = rbfi(x_fine.ravel(), y_fine.ravel()).reshape([x_fine.shape[0],
y_fine.shape[0]])
plt.imshow(interpolated_data)
Run Code Online (Sandbox Code Playgroud)
该数组interpolated_data的值范围为 0.988 到 1.002,相应的图如下所示:
但是,我希望在这样一个简单的插值情况下,插值值会更接近正确值,即 1.000。
我认为插值的变化是由插值点到给定数据点的距离不同引起的。
我的问题是:有没有办法避免这种行为?如何获得不按插值点到数据点的距离进行加权的插值,并且只给我 1.000 的值interpolated_data?
当我尝试使用以下代码使用scipy.minimize.brute()最小化一个函数时:
import scipy
scipy.optimize.brute(lambda x: x**2, ranges=(-2,3))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError: object of type 'int' has no len()
Run Code Online (Sandbox Code Playgroud)
我想这与范围的规格有关,但是我不明白为什么。该文件说
范围元组的每个组成部分都必须是“切片对象”或形式(低,高)的范围元组。
我的错误在哪里?
scipy.optimize.fmin_powell()和scipy.optimize.minimize()与指定为“Powell”的方法有什么区别?
我想将随机散布在球体表面上的数据插入到规则的经度/纬度网格上。我试图SmoothSphereBivariateSpline()从scipy.interpolate包中做到这一点(见下面的代码)。
import numpy as np
from scipy.interpolate import SmoothSphereBivariateSpline
#Define the input data and the original sampling points
NSamp = 2000
Theta = np.random.uniform(0,np.pi,NSamp)
Phi = np.random.uniform(0,2*np.pi, NSamp)
Data = np.ones(NSamp)
Interpolator = SmoothSphereBivariateSpline(Theta, Phi, Data, s=3.5)
#Prepare the grid to which the input shall be interpolated
NLon = 64
NLat = 32
GridPosLons = np.arange(NLon)/NLon * 2 * np.pi
GridPosLats = np.arange(NLat)/NLat * np.pi
LatsGrid, LonsGrid = np.meshgrid(GridPosLats, GridPosLons)
Lats = LatsGrid.ravel()
Lons = LonsGrid.ravel() …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在 Ubuntu 18.04 计算机上安装此 GitHub 库,并且遵循了 Github 页面上所述的所有安装步骤。但是,当我尝试在命令行中调用该函数时siemens_to_ismrmrd,出现以下错误:
error while loading shared libraries: libhdf5.so.101: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
不过,libhdf5 安装在我的机器上。locate libhdf5.so在命令行中输入给出
/home/username/anaconda3/lib/libhdf5.so
/home/username/anaconda3/lib/libhdf5.so.101
/home/username/anaconda3/lib/libhdf5.so.101.0.0
/home/username/anaconda3/pkgs/hdf5-1.10.1-h9caa474_1/lib/libhdf5.so
/home/username/anaconda3/pkgs/hdf5-1.10.1-h9caa474_1/lib/libhdf5.so.101
/home/username/anaconda3/pkgs/hdf5-1.10.1-h9caa474_1/lib/libhdf5.so.101.0.0
Run Code Online (Sandbox Code Playgroud)
在关于 SO 的另一个问题中,建议运行sudo ldconfig. 这对我的情况也没有帮助,仍然弹出相同的错误。
echo $LD_LIBRARY_PATH建议在其他问题中查看的命令不返回任何内容。
我该如何解决这个问题?
我想在 LibreOffice Draw 中绘制一条高斯曲线作为矢量图形。使用“曲线”函数,我只能得到 类似抛物线的东西。 有人知道如何做高斯吗?
先感谢您!
我想检查文件是否存在并尝试使用以下函数
#include <fstream>
bool DoesFileExist(const std::string& filename) {
std::ifstream ifile(filename.c_str());
return (bool)ifile;
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有正常工作,因为而不是检查存在是否创建了文件!这有什么问题?
请注意,我被迫使用C++ 98标准,不能使用#include <sys/stat.h>或#include <unistd.h>在此处接受的答案中建议.
python ×9
numpy ×7
scipy ×5
optimization ×2
c++ ×1
cmake ×1
contiguous ×1
file ×1
fstream ×1
gaussian ×1
ifstream ×1
libreoffice ×1
makefile ×1
matlab ×1
matplotlib ×1
matrix ×1
mayavi ×1
performance ×1
plot ×1
runtime ×1
sorting ×1
ubuntu ×1