当前位置: 首页 > 知识库问答 >
问题:

Python:直方图/装箱来自2个数组的数据。

李凯定
2023-03-14

我有两个数据数组:一个是半径值,另一个是该强度下的相应强度读数:

e、 g.数据的一小部分。第一列是半径,第二列是强度。

<代码>29.77036614 0.0446427 29.70281027 0.07771409 29.63523525 0.09424901 29.3639355 1.322793 29.29596385 2.321502 29.22783249 2.415751 29.15969437 1.511504 29.09139827 1.01704 29.02302068 0.9442765 28.95463729 0.3109002 28.88609766 0.162065 28.8175446 0.1356054 28.74883612 0.0363781 28.68004928 0.05952569 28.61125036 0.0529117 28.54229804 0.08432806 28.4732599 0.099 50128 28.43877462号0.1091304 28.40421016 0.09629156 28.36961249 0.1193614 28.33500089 0.102711 28.30037503 0.07161685

我如何收集半径数据,并找到对应于该收集半径的平均强度。

这样做的目的是使用平均强度将强度值分配给缺少 (NaN) 数据点的半径数据。

我以前从未使用过直方图函数,也不知道它们是如何工作的/是否有可能用它们来做这件事。完整的数据集很大,有336622个数据点,所以我真的不想使用循环或if语句来实现这一点。
非常感谢您的帮助。

共有2个答案

邬良才
2023-03-14

这不是你真正想要的柱状图。直方图更多的是属于特定容器的项目的计数。你想要做的更多的是通过操作来分组,你可以通过半径间隔来分组你的强度,并且在强度组上你可以应用一些聚合方法,比如平均值或者中间值等等。

然而,你所描述的听起来更像是你想要执行的某种插值。因此,我建议考虑将插值作为解决您的问题的替代方案。无论如何,这里有一个建议,你如何实现你所要求的(假设你可以使用numpy) - 我使用随机输入来说明:

radius = numpy.fromiter((random.random() * 10 for i in xrange(1000)), dtype=numpy.float)
intensities = numpy.fromiter((random.random() * 10 for i in xrange(1000)), dtype=numpy.float)
# group your radius input into 20 equal distant bins
bins = numpy.linspace(radius.min(), radius.max(), 20)
groups = numpy.digitize(radius, bins)
# groups now holds the index of the bin into which radius[i] falls
# loop through all bin indexes and select the corresponding intensities
# perform your aggregation on the selected intensities
# i'm keeping the aggregation for the group in a dict
aggregated = {}
for i in range(len(bins)+1):
    selected_intensities = intensities[groups==i]
    aggregated[i] = selected_intensities.mean()
华峰
2023-03-14

如果你只需要在几个点上这样做,你可以做这样的事情。

如果强度radiusare numpy数组:

bin_width = 0.1 # Depending on how narrow you want your bins

def get_avg(rad):
    average_intensity = intensities[(radius>=rad-bin_width/2.) & (radius<rad+bin_width/2.)].mean()
    return average_intensities

# This will return the average intensity in the bin: 27.95 <= rad < 28.05
average = get_avg(28.)
 类似资料:
  • 在Matplotlib中创建堆叠直方图时,我注意到箱宽缩小了。在这个简单的例子中: 我得到以下输出: 请注意,左侧的直方图在每个存储区之间都有行间距,即使左侧和右侧直方图都使用相同的存储区。 有没有办法纠正这种行为?我想在左边的直方图使用完整的箱子宽度,这样相邻的箱子共享一条边。

  • 目标 在本节中, 我们将学习直方图均衡化的概念,并利用它来提高图像的对比度。 理论 考虑这样一个图像,它的像素值仅局限于某个特定的值范围。例如,较亮的图像将把所有像素限制在高值上。但是一幅好的图像会有来自图像所有区域的像素。因此,您需要将这个直方图拉伸到两端(如下图所示,来自wikipedia),这就是直方图均衡化的作用(简单来说)。这通常会提高图像的对比度。 我建议您阅读直方图均衡化上的Wiki

  • 此函数类似于numpy.array,除了它有较少的参数。 这个例程对于将 Python 序列转换为ndarray非常有用。 构造器接受下列参数: 下面的例子展示了如何使用asarray函数: # 将列表转换为 ndarray import numpy as np a = np.asarray(x) print a 输出如下: [1 2 3] 示例 2 import numpy as np x

  • 我正在使用Seaborn的FaceGrid绘制一些直方图,我认为自动箱子大小调整只使用每个类别(而不是每个子批次)的数据,这导致了一些奇怪的结果(请参见中的瘦绿色箱子): 有没有一种方法(使用海运,而不是回到matplotlib)使每个图的直方图箱大小相等? 我知道我可以手动指定所有的箱子宽度,但这会迫使所有的直方图都是相同的x范围(见笔记本)。 笔记本:https://gist.github.c

  • 我使用matplotlib在python中绘制直方图,方法是: 是否可以打印包含所有存储箱信息的数据框,如每个存储箱中的元素数量?

  • 问题内容: 有没有一种方法可以指定MySQL中的bin大小?现在,我正在尝试以下SQL查询: 生成的数据足够好,但是行太多。我需要的是一种将数据分组到预定义的bin中的方法。我可以从脚本语言执行此操作,但是有没有办法直接在SQL中执行此操作? 例: 我在寻找什么: 我猜想这不能直接实现,但是对任何相关存储过程的引用也可以。 问题答案: 这是一篇有关在MySQL中为数值创建直方图的超级快捷方法的文章