我有一个很大的numpy.ndarray,我想制作一个图,其中x轴与数组中的值有关,y轴表示该值出现在数组中的频率。要清楚,我不关心数组中数据的顺序,或者如果它们的顺序搞砸了,我只想取数字,将它们分开,然后绘制它们。
到目前为止,我想要做的步骤,我的Jupyter笔记本中的每一个都是独立的
打开/读取我的数组(它的1024x1024,非常大) - 步骤完成
将数组转换为list-done
在数组中吐出空值...目前无法正常工作
Bin数据计算值......真的丢失了
分散情节 - 修剪与数量 - 一旦前两个工作,matplotlib与我相处,这部分将会很好
将numpy导入为np
将matplotlib.pyplot导入为plt
scidata = np数据数组,1024x1024
lsci = []
表示范围(1024)中的r:
scilist = scidata[r,:].tolist()
lsci.extend(scilist)
trimmed = lsci
表示lsci:
中的项目 if 12.58 <= i== 12.59: #the null value I don't want is in this range
r.remove(item)
对不起,我希望自己有更多,但这对我来说有点冒险,我有点惭愧发布我尝试过但失败的事情,因为大多数都是死路一条。我想到的唯一真正的解决方案是对数据进行分级......但是这对于散点图不起作用,因为两个列表的长度不一样,而且直方图不是&# 39;无论如何我想要的最终产品。那么我可以使用另一种方法,我不知道吗? (我觉得那里有一些我从未学过的编码知识 - 当然我并不是第一个想要这样做的人。)谢谢!
编辑:抱歉,我的所有代码都没有显示为代码,即使我放了四个空格......
答案 0 :(得分:0)
'Binning'绝对是一个直方图功能,但我得到的印象是你需要一个简单的数据透视表。怎么样:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
a = np.random.randint(10, size=100) # array([3, 0, 3, 8, 1, 9, 1, 8,...])
exclude_value = 3 # change as required
a_new = [item for item in a if item != exclude_value] # new list without exclude value
df = pd.DataFrame(a_new).pivot_table(columns=0, aggfunc='size')
x = df.index.values
y = df.values
plt.bar(x,y)
plt.xticks(x)
plt.show()
输出:
答案 1 :(得分:0)
Nick Braunage提出了同样的建议,但没有熊猫:
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randint(10, size=100) # or use yourarray.ravel() here to make it flat
num, bins, _ = plt.hist(a)
plt.show()
或
num, bins = np.histogram(a)
plt.bar(bins[:-1], num)
plt.show()