Arv*_*try 6 python numpy matplotlib scipy
当我尝试制作没有零值的直方图时,出现错误:
回溯(最近一次调用最后一次):。
Beam_irradiance_DNI
我有一个包含几个零的值列表。我可以制作直方图,但我不需要零值。
import matplotlib.pyplot as plt
import numpy as np
import csv
# Reading data from csv file
with open('Upington_DNI.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
Hour_of_year = []
Beam_irradiance = []
for row in readCSV:
hour = row[0]
DNI = row[1]
Hour_of_year.append(hour)
Beam_irradiance.append(DNI)
Hours_since00hrsJan1 = [float(Hour_of_year[c]) for c in range(1,len(Hour_of_year))]
Beam_irradiance_DNI=[float(Beam_irradiance[c]) for c in range(1,len(Beam_irradiance))]
plt.figure(3)
Beam_irradiance_DNI[ Beam_irradiance_DNI==0 ] = np.nan
plt.hist(Beam_irradiance_DNI, color="grey")
plt.title("Histogram for Beam irradiance - DNI")
plt.xlabel("Beam irradiance - DNI [W/m2]"); plt.ylabel("Probability of occurrence")
plt.show()
Run Code Online (Sandbox Code Playgroud)
我不知道这里出了什么问题。
您只能在非正常的 Python 列表data[data != 0]
上执行逻辑索引 ( ) 。如果你想从 python 列表中删除值,你需要使用列表理解来做到这一点。numpy.array
newvalues = [x for x in Beam_irradiance_DNI if x != 0]
Run Code Online (Sandbox Code Playgroud)
另一种选择是将python 列表实际转换为 numpy 数组。
nparray = np.array(Bean_irradiance_DNI)
Run Code Online (Sandbox Code Playgroud)
然后您将能够执行您想要执行的逻辑索引
nparray[nparray == 0] = np.nan
Run Code Online (Sandbox Code Playgroud)
另一种选择是不改变数组本身,只将非零值传递给hist
plt.hist(Beam_irradiance_DNI[Beam_irradiance_DNI != 0], color="grey")
Run Code Online (Sandbox Code Playgroud)
如果您仍然遇到零问题,可能是因为这些数字存储为浮点数并且它们的值不完全为零。为此,您需要使用以下条件来检测“零”。
is_zero = np.absolute(Beam_irradiance_DNI) < np.finfo(float).eps
Beam_irradiance_DNI[is_zero] = np.nan
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21847 次 |
最近记录: |