制作Numpy数组值的情节

时间:2016-09-14 16:10:56

标签: python arrays numpy matplotlib

我有一个很大的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;无论如何我想要的最终产品。那么我可以使用另一种方法,我不知道吗? (我觉得那里有一些我从未学过的编码知识 - 当然我并不是第一个想要这样做的人。)谢谢!

编辑:抱歉,我的所有代码都没有显示为代码,即使我放了四个空格......

2 个答案:

答案 0 :(得分:0)

'Binning'绝对是一个直方图功能,但我得到的印象是你需要一个简单的数据透视表。怎么样:

  1. 删除不需要的值
  2. 将numpy数组转换为dataframe
  3. 从数据框
  4. 创建数据透视表
  5. 绘制结果
  6. 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()
    

    输出:

    (注意如何排除一个值,在本例中为3) enter image description here

答案 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()