【问题标题】:How to get distribution of three dimension from three array on python2.7如何从python2.7上的三个数组中获取三个维度的分布
【发布时间】:2018-02-16 21:16:29
【问题描述】:

我会尽量具体说明我所说的话。首先给你看代码:

    import numpy as np
    import matplotlib.pyplot as plt

    np.random.seed(1977)
    x, y = np.random.random((2, 1000))
    xbins = np.linspace(0, 1, 10)
    ybins = np.linspace(0, 1, 10)
    counts, _, _ = np.histogram2d(x, y, bins=(xbins, ybins))

    print counts

你将从这段代码中得到一个二维数组,现在如果我有另一个数组

       z = np.random.random((2, 1000))

那么如何从这三个数组中得到一个分布的三维数组。我试过了:

      zbins = np.linspace(0, 1, 10)
      counts, _,_,_ = np.histogramdd(x, y, z, bins=(xbins, ybins, zbins))

但这没有用。 更重要的是,真正的数据文件太大了,无法使用循环语句,这将花费我几个小时来运行它,而且我也不容易检查。 感谢您考虑这个问题!

【问题讨论】:

  • 我不清楚你想在这里实现什么。你能更详细地解释一下上下文吗? x、y、z在现实中的物理意义是什么?你想提取什么样的信息?
  • 代码中的随机数组x,y,z只是举例,我要处理的数组x,y,z来自一个1.2M的数据文件,形式看起来像'xx = data_txt[i][0] yy = data_txt[i][1] zz = data_txt[i][2]' ,然后我得到 'x = xx[i], y = yy[i], z = zz[i]' 作为数组。
  • 而函数'counts, , _ = np.histogram2d(x, y, bins=(xbins, ybins))'只能处理2d。 (这个函数输出一个二维数组,如果你不明白,make 'x, y = np.random.random((2, 10))',然后你会看到。)。所以,我认为必须有一个函数可以处理 x,y 和 z,就像 'counts, _,,' 所做的那样。但我没找到。
  • 也许我可以这样说,我有100000个点在三维坐标系中的位置坐标。现在,如果我在三维坐标系中将它们分成1000个网格,我想知道每个网格中有多少个点,这应该是一个3d数组。

标签: python arrays arraylist


【解决方案1】:

我根据你上次的评论做了如下代码

import numpy as np

data = np.random.random((1000, 3))
nbins = 10
H, [bx, by, bz]=np.histogramdd(data, bins=(nbins,nbins,nbins), 
                               range=((0,1),(0,1),(0,1)))

H是每个网格中点数的汇总。在您之前的代码中,histogramdd 未正确使用。输入数据是第一个参数,在您的情况下应该是 N x 3 数组。

你可以看到document of histogramdd here

【讨论】:

  • 我很想去做,但是我的声誉不够高,无法投票。真的很抱歉。(“感谢您的反馈!声望低于 15 人的投票会被记录下来,但不要更改公开显示的帖子得分。”)
  • 任何人都应该能够接受答案,请参阅here
  • 得到它(^*_*^)。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 2012-10-26
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多