Matlab代码到Python代码的转换(使用数据帧)

Matlab代码到Python代码的转换(使用数据帧),python,pandas,python-2.7,matlab,data-conversion,Python,Pandas,Python 2.7,Matlab,Data Conversion,因此,我正在将Matlab代码更改为python代码,以可视化图形。该代码基本上用于处理来自雷达信号的数据。下面是Matlab代码 data1 = csvread('degree45_rd1_sitstill_0305.csv'); rd1_data = data1(:,2:end); rd1_nor = abs(rd1_data); radarResolution = 0.0522; radarDataTimes = data1(:,1); % plot raw data fs = fl

因此,我正在将Matlab代码更改为python代码,以可视化图形。该代码基本上用于处理来自雷达信号的数据。下面是Matlab代码

data1 = csvread('degree45_rd1_sitstill_0305.csv');  
rd1_data = data1(:,2:end);
rd1_nor = abs(rd1_data);
radarResolution = 0.0522; 
radarDataTimes = data1(:,1);
% plot raw data
fs = floor((length(radarDataTimes)-1)/(radarDataTimes(end)- radarDataTimes(1)));
ts = 1/fs;
t = (0:length(rd1_nor(:,1))-1)/fs;
dist_rd1 = (0:length(rd1_nor(1,:))-1)*radarResolution;
figure;
contour(dist_rd1,t,rd1_nor);
title('Radar 1 raw data plot'); ylabel('Time (s)'); xlabel('Distance (m)');
这是Python中的更改代码,我怀疑我是否得到了fs,或者应用循环是否正确

import pandas as pd 
import numpy as np 
import numpy
import matplotlib
matplotlib.use('Qt4Agg')

print(df)

rd1_data =df.iloc[:, 1:]
print(rd1_data)
print(np.shape(rd1_data))

a = numpy.asarray(rd1_data)
print(np.shape(a))

arr = []

i = 0
for v in a:
arr.append([])
for x in v:
arr[i].append(abs(complex(x)))
i+=1
print(arr)


data = pd.DataFrame(arr)
print(data)



radar_datatime = df.iloc[:,0]

print(radar_datatime)
import math
radarResolution = 0.0522
fs = math.floor(len(radar_datatime)-1)/(radar_datatime[180]-radar_datatime[0])
print(fs)
ts = 1/fs
print(ts)


print(np.shape(arr))


t = [((val[0]-1)/fs) for val in arr]
print(t)
print(np.shape(t))
dist_rd1 = [((val-1)*radarResolution) for val in arr[0]]
print(dist_rd1)
print(np.shape(dist_rd1))

data_t=data.iloc[:,:]
print(data_t)





import matplotlib.pyplot as plt
plt.contour(dist_rd1,t,arr)
plt.savefig("/Users/fateh/Documents/my_file.png")
plt.show()

为了验证我是否正确编辑了python代码。我们需要找到最好的解决方案。提前谢谢

我觉得你把这件事搞得太复杂了。 我不确定您的原始数据文件是什么样子,我已经制作了一个合成图来测试您的代码。我不能完全确定你在这里要做的是什么

我已经为您翻译了Matlab代码。检查正在进行的操作,尤其是t的计算。(除非您真的想通过ts而不是像示例中那样的fs进行/s)

所以我不确定这正是你想要的,但它确实起了作用

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#data1 = pd.readcsv('degree45_rd1_sitstill_0305.csv') 
#Synthetic Data:
data1=pd.DataFrame(np.random.randint(1000,size=(5,10)))

rd1_data = data1.iloc[:,1:-1]
#Changed to 1:-1 as index in Matlab stat at 1 compared to 0 in python
rd1_nor = abs(rd1_data)
radarResolution = 0.0522
radarDataTimes = data1.iloc[:,0]

# plot raw data
fs = np.floor((len(radarDataTimes)-1)/(radarDataTimes.iloc[-1]- radarDataTimes[0]))
ts = 1/fs

t = len((rd1_nor.iloc[:,1])-1)
t=np.arange(0,t) #/ts
#/fs doesn't want to work. Not sure if its something with my synthetic dataset though or if want to / fs or ts.

dist_rd1 = len((rd1_nor.iloc[1,:])-1)
dist_rd1=np.arange(0,dist_rd1)*radarResolution

plt.contourf(dist_rd1,t,rd1_nor);
plt.title('Radar 1 raw data plot')
plt.ylabel('Time (s)')
plt.xlabel('Distance (m)')

我觉得你把这件事搞得太复杂了。 我不确定您的原始数据文件是什么样子,我已经制作了一个合成图来测试您的代码。我不能完全确定你在这里要做的是什么

我已经为您翻译了Matlab代码。检查正在进行的操作,尤其是t的计算。(除非您真的想通过ts而不是像示例中那样的fs进行/s)

所以我不确定这正是你想要的,但它确实起了作用

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#data1 = pd.readcsv('degree45_rd1_sitstill_0305.csv') 
#Synthetic Data:
data1=pd.DataFrame(np.random.randint(1000,size=(5,10)))

rd1_data = data1.iloc[:,1:-1]
#Changed to 1:-1 as index in Matlab stat at 1 compared to 0 in python
rd1_nor = abs(rd1_data)
radarResolution = 0.0522
radarDataTimes = data1.iloc[:,0]

# plot raw data
fs = np.floor((len(radarDataTimes)-1)/(radarDataTimes.iloc[-1]- radarDataTimes[0]))
ts = 1/fs

t = len((rd1_nor.iloc[:,1])-1)
t=np.arange(0,t) #/ts
#/fs doesn't want to work. Not sure if its something with my synthetic dataset though or if want to / fs or ts.

dist_rd1 = len((rd1_nor.iloc[1,:])-1)
dist_rd1=np.arange(0,dist_rd1)*radarResolution

plt.contourf(dist_rd1,t,rd1_nor);
plt.title('Radar 1 raw data plot')
plt.ylabel('Time (s)')
plt.xlabel('Distance (m)')

fs=17,因为我每秒拍摄17帧,但如果我把fs=17硬编码,我会得到一个空白图,为什么我们有两个t和两个dist_rd1变量。如果不看数据,我真的帮不了你。为了清晰起见,有两个t和两个dist_rd1。第一个计算长度,然后第二个计算范围在0和长度之间,与matlab代码所做的相同;为了清楚起见,我只用了两行。取消对't=np.arange(0,t)#/ts'的注释如果你想在这里除法,我想你会的。并在顶部使用正确的数据1。一些prints()可能有助于调试。我也不确定操作顺序是否在
fs=np.floor
嘿,现在它工作了,我对它做了更改。但我的图表不是很清楚。Matlab中的等高线图和Python中的等高线图有什么区别吗?可能与您使用的彩色地图有关?还可以尝试使用plt.colorbar()。我在这里使用了contourf(filled)(而不是contour),它不应该与matlab上的contour有太大的不同,但我不能完全确定。您也可以尝试plt.pcolormesh或plt.imshow。也可以尝试设置plt.contourf(x,y,z,levels=20)或其他获得更多轮廓的方法也可能对您有所帮助。fs=17,因为我每秒拍摄17帧,但如果我把fs=17硬编码,我会得到一个空白图,为什么我们有两个t和两个dist_rd1变量。如果不看数据,我真的帮不了你。为了清晰起见,有两个t和两个dist_rd1。第一个计算长度,然后第二个计算范围在0和长度之间,与matlab代码所做的相同;为了清楚起见,我只用了两行。取消对't=np.arange(0,t)#/ts'的注释如果你想在这里除法,我想你会的。并在顶部使用正确的数据1。一些prints()可能有助于调试。我也不确定操作顺序是否在
fs=np.floor
嘿,现在它工作了,我对它做了更改。但我的图表不是很清楚。Matlab中的等高线图和Python中的等高线图有什么区别吗?可能与您使用的彩色地图有关?还可以尝试使用plt.colorbar()。我在这里使用了contourf(filled)(而不是contour),它不应该与matlab上的contour有太大的不同,但我不能完全确定。您也可以尝试plt.pcolormesh或plt.imshow。也可以尝试设置plt.contourf(x,y,z,levels=20)或其他获得更多轮廓的方法也可能对您有所帮助。