我正在学习如何使用fortran处理FFTW包.为了产生一个易于验证的例子,我计算了2d平面的功率谱,我用两个不同的叠加波填充.通过这种方式,我确切地知道了功率谱中峰值的确切位置.
由于FFTW文档对于C来说更为广泛,我首先在C中实现了算法,这给了我非常满意的结果:
"lambda1"和"lambda2"是已知的预期波长.蓝线是获得的功率谱.
然后我尝试用fortran做同样的事情,这给出了奇怪的结果:

我不知道在哪里寻找可能的错误.代码执行顺利.有人可以帮忙吗?
这是C代码,用以下代码编译:gcc stackexchange.c -o a.out -I/home/myname/.local/include -lfftw3 -lm -g -Wall(gcc 5.4.0)
#include <fftw3.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// parameters
int Nx = 200;
int Ny = 100;
int nsamples = 200;
float pi = 3.1415926;
float physical_length_x = 20;
float physical_length_y = 10;
float lambda1 = 0.5;
float lambda2 = 0.7;
float dx = physical_length_x/Nx;
float dy = physical_length_y/Ny;
float dkx = 2*pi/physical_length_x;
float dky = 2*pi/physical_length_y;
// counters/iterators …Run Code Online (Sandbox Code Playgroud) 据我所知,我的问题与这篇文章密切相关。
我需要绘制一些标记大小与轴值严格成比例的数据。(已经在这里问过这个问题)。
我的方法如下:
transData.transform获取这两个点的像素值s=(size*dist_to_pix_ratio)**2,但这现在并不重要。)问题是:当我完全按照我所描述的操作时,我得到 y 轴和 x 轴像素数的两个不同值。
这是一个最小的代码:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(7,7))
ax1 = fig.add_subplot(111, aspect='equal')
#setting up an empty scatterplot for pixel reference
xedges=[0.0, 1.0]
yedges=[0.0, 1.0]
emptyscatter=ax1.scatter(xedges, yedges, s=0.0)
#set axes limits
ax1.set_xlim(0.00,1.00)
ax1.set_ylim(0.00,1.00)
# Calculating the ratio of pixel-to-unit
upright = ax1.transData.transform((1.0,1.0))
lowleft = ax1.transData.transform((0.0,0.0))
x_to_pix_ratio = upright[0] - lowleft[0]
y_to_pix_ratio = upright[1] - lowleft[1]
print x_to_pix_ratio, …Run Code Online (Sandbox Code Playgroud) 我正在处理其他人编写的一些代码,并发现了一段我尚未见过的Fortran语法,并且不完全理解也无法在网上找到任何内容(可能是因为我不知道它是什么所谓的).
代码如下所示:
bisection_or_ordering:if(ordering /= 'bisection') then
...
do stuff
...
end if bisection_or_ordering
Run Code Online (Sandbox Code Playgroud)
bisection_or_ordering 不是变量,也没有在代码中的任何地方声明.
这是做什么的?它是为了什么?它叫什么?
我对此感到非常绝望,到目前为止我在 www 上找不到任何东西。
情况是这样的:
到目前为止,一切都按照我想要的方式进行。这是困扰我的事情:
我正在努力解决的是找出绘图点与轴长度的比率。我需要使用点,因为据我所知,散点图的圆圈大小以点值给出。因此,如果假设我的轴从 0 到 10,我需要知道图中中间有多少个点。
有谁能够帮助我?或者还有其他方法可以做到这一点吗?提前致谢。
我需要读入存储在许多相同格式的文件中的数据,但是长度不同,即相同的列,但行数不同.此外,我需要将每列数据存储在一个数组中(最好是一个numpy数组,但列表也可以接受).
现在,我在循环中读取每个文件numpy.loadtxt(),然后连接生成的数组.假设数据由3列组成,并存储在两个文件"foo"和"bar"中:
import numpy as np
filenames = ["foo", "bar"]
col1_all = 0 #data will be stored in these 3 arrays
col2_all = 0
col3_all = 0
for f in filename:
col1, col2, col3 = np.loadtxt(f, unpack=True)
if col1.shape[0] > 0: # I can't guarantee file won't be empty
if type(col1_all) == int:
# if there is no data read in yet, just copy arrays
col1_all = col1[:]
col2_all = col2[:]
col3_all = col3[:]
else:
col1_all = np.concatenate((col1_all, …Run Code Online (Sandbox Code Playgroud) python ×3
fortran ×2
scatter-plot ×2
area ×1
arrays ×1
axis ×1
c ×1
fftw ×1
markers ×1
matplotlib ×1
numpy ×1
python-2.7 ×1
scatter ×1
size ×1
syntax ×1