Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从numpy数组中删除变量_Python_Python 2.7_Numpy - Fatal编程技术网

Python 从numpy数组中删除变量

Python 从numpy数组中删除变量,python,python-2.7,numpy,Python,Python 2.7,Numpy,我有一个创建的代码,但我不知道如何删除“canal 1”-红线中的第一个数据,以及“canal 3”-蓝线中的最后一个数据,这些垂直线。两条运河都有266336条记录,你能帮忙吗? 红色垂直线是第一条记录,蓝色是最后一条记录 import iodata as io import matplotlib.pyplot as plt import numpy as np import time testInstance = io.InputConverter() start = time.time(

我有一个创建的代码,但我不知道如何删除“canal 1”-红线中的第一个数据,以及“canal 3”-蓝线中的最后一个数据,这些垂直线。两条运河都有266336条记录,你能帮忙吗? 红色垂直线是第一条记录,蓝色是最后一条记录

import iodata as io
import matplotlib.pyplot as plt
import numpy as np
import time

testInstance = io.InputConverter()
start = time.time()
conversionError = io.ConversionError()
#f = testInstance.convert(r"S:\Python\", 1", conversionError)
f = testInstance.convert(r"/Users/Hugo/20160401", "201604010000", 
conversionError)
end = time.time()
print("time elapsed " + str(end - start))

if(conversionError.conversionSucces):
    print("Conversion succesful")
if(conversionError.conversionSucces == False):
    print("Conversion failed: " + conversionError.conversionErrorLog)
print "Done!"

# Create a new subplot for two canals 1 & 3
a = np.amin(f.f)
filename = 'C:/Users/Hugo/20160401/201604010000.dat'
d = open(filename,'rb')
t = u"\u00b0"
headersize = 64
header = d.read(headersize)
ax1 = plt.subplot(211)
ax1.set_title(header[:16] + ', ' +                          # station name
     'Canals: '+header[32:33]+' and '+header[34:35]+ ', '   # canals
     +'Temp'+header[38:43]+t+'C'                            # temperature
    +', '+'Time:'+header[26:32]+', '+'Date'+' '+header[16:26])      # date

plt.ylabel('Pico Tesle [pT]')
plt.xlabel('Time [ms]')
plt.plot(f.f[0,], label='Canal 1', color='r', linewidth=0.75, linestyle="-")
plt.plot(f.f[1,], label='Canal 3', color='b', linewidth=0.75, linestyle="-")
plt.legend(loc='upper right', frameon=False)
plt.grid()
# Create a new subplot for FFT
plt.subplot(212)
plt.title('Fast Fourier Transform')
plt.ylabel('Power [a.u.]')
plt.xlabel('Frequency Hz')
FFTdata = np.sqrt(f.f[0,]*f.f[0,]+f.f[1,]*f.f[1,])**1
samples = FFTdata.size
duration = 300 # in seconds
Fs = float(samples)/duration # sampling frequency (sample/sec)
delta_t = 1.0/Fs
t = np.arange(0, samples, 1)*delta_t
FFTdata_freq = np.abs(np.fft.rfft(FFTdata))**2
freq = np.fft.rfftfreq(samples, d=delta_t)

# Printing data
plt.semilogy(freq, FFTdata_freq)
plt.grid()
#plt.savefig('S:/Hugo/'+"201604010000"+'.png', bbox_inches = 
'tight')
plt.show()
f.f
的内容:

>>> print f.f[0,]
[ -59.57011259 -74.20675537 -90.53224156 ..., -1676.9703173 -1676.9703173 -1676.9703173 ]

>>> print f.f[1,] 
[ 1.48413511e+00 4.96417605e+00 8.39303992e+00 ..., -1.67697032e+03 -1.67697032e+03 -1.67697032e+03] 
iodata代码:

import struct
import numpy as np

class ConversionError:
    def __init__(self):
        self.conversionSucces = True
        self.conversionErrorLog = "Correct"

    def reportFailure(self, errorlog):
        self.conversionSucces = False
        self.conversionErrorLog = errorlog

class DataStruct:
    def __init__(self,f,initTime,headerString):
        self.f = f
        self.initTime = initTime
        self.headerString = headerString

class InputConverter:
    def __init__(self):
        self.midAdc = 65536/2
        self.convFactor = 19.54

    def convert(self,filePath,fileName,conversionLog):
        try:
            d_file = open(filePath + "/" + fileName + ".dat", mode='rb')
         except IOError as e:
            conversionLog.reportFailure(e.strerror)

        file = d_file.read()
        datalen = len(file)
        headerString = file[:43]
        initime, = struct.unpack('>H', file[48:50])
        expectedMatrixWidth = (datalen - 72)/4
        outputMatrix = np.zeros((2, expectedMatrixWidth))
        index = 0;
        print "Processing..."
        for i in range(64, datalen-8, 4):
            e1, e2 = struct.unpack('>HH',file[i:i+4])
            outputMatrix[0, index] = (e1 - self.midAdc)/self.convFactor
            outputMatrix[1, index] = (e2 - self.midAdc)/self.convFactor
            index += 1


        return DataStruct(outputMatrix,initime,headerString)

您可以尝试使用阵列切片:

plt.plot(f.f[0,][1:], label='Canal 1', color='r', linewidth=0.75, linestyle="-")
plt.plot(f.f[1,][:-1], label='Canal 3', color='b', linewidth=0.75, linestyle="-")
编辑:

由于数据的性质,正如@Dascienz在评论中所建议的那样,切掉不仅仅是第一个/最后一个数据点是合适的。类似这样的情况,第一个和最后50个数据点从两个系列中切掉:

plt.plot(f.f[0,][50:-50], label='Canal 1', color='r', linewidth=0.75, linestyle="-")
plt.plot(f.f[1,][50:-50], label='Canal 3', color='b', linewidth=0.75, linestyle="-")

关于为什么我的第一个答案似乎没有效果的冗长解释


从通道1删除第一个数据点和从通道3删除最后一个数据点不会消除异常。许多数据点都有助于它们

查看
f.f[0,]
(运河1,红色)和
f.f[1,]
(运河3,蓝色)的最后三个数据点:它们都是相同的值:
-1676.97003…
。这解释了图右侧的紫色(即红色和蓝色)尖峰

另外,请查看
f.f[0,]
(canal 1,红色)的前三个值:它们大致为
-60
-75
-90
。很明显,去掉第一个值并不能消除图左侧的异常,在图中,值一直上升到超过
500
,下降到小于
-500
。这些值必须出现在
2
以上的索引处,但仍然远远小于
50000
,这就是为什么它们看起来出现在
0


简言之,为了消除异常,在绘制数据之前,您需要更仔细地清理数据,而不是仅仅切掉第一个和/或最后一个值(这是我最初的答案,我认为正确)。

发生了什么?绘图和以前一样,还是代码抛出并出错?如果是,错误是什么?没有任何变化。未发生任何错误,并且绘图看起来相同。我考虑过定义,例如“samples”等于266336,然后以某种方式链接,然后减去第一个和最后一个记录,但不知道这是否起作用或如何做。print f.f[0,]的输出是什么?Canal 1-红线我的意思是,如果在代码中添加行
print f.f[0,]
,控制台中相应的输出是什么?我希望它类似于
数组([val1,val2,val3,…])
。我感兴趣的是前几个
val
s是什么。。。❶ 请不要将第三方库重命名为标准库中的一个模块,我花了一些时间来理解为什么在整个internet中找不到
io.InputConverter
❷ 鉴于
iodata
模块没有文档(可能除了文档字符串),除非您详细解释什么是
f
,否则很难提供帮助-您收到的答案似乎合理,如果答案对您不好,那是因为
f
不是
ndarray
(或者你还没有完全理解答案,谁知道呢…)-请你的问题来解释你对
iodata
东西的使用。我添加了所有内容,对此表示抱歉。如果你表现出对改进的承诺,不必感到抱歉,而且你的编辑显然是朝着正确方向迈出的一步。非常感谢你的帮助。你的回答在一些方面帮助了我,但同时也让我对其中一点感到困惑我的部分代码,我将添加到我的问题中。也许你能帮助我。我的意思是如何将这些更改应用到fft图中(顺便说一句,它还没有完成。但我认为它应该在切片不必要的数据后更改)。