根据坐标计算落入箱中的数字

时间:2017-07-25 15:35:00

标签: python

我试图根据分子的坐标来计算落入特定箱子的分子数量。我认为numpy的非零选项(类似于MATLAB中的find()可以完成这项工作)。起初,我没有使用np.any,但我得到了错误

  

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()。

当我使用np.any时,错误仍然存​​在。

Lower limit = 0
bin_size=0.01
box=40
NO_bin= box/bin_size
for k in range(No_bins):
        if k==0:
            count = np.any(np.size(np.nonzero(data_matrix[:,3]>= k*bin_size+lower_limit and \
            data_matrix[:,3]<=(k+1)*bin_size+lower_limit)))
        else:
            count = np.any(np.size(np.nonzero(data_matrix[:,3]>=(k-1)*bin_size+lower_limit and \
            data_matrix[:,3]<=k*bin_size+lower_limit)))

            Atom_in_bin[j,2] = Atom_in_bin[j,2] + count

1 个答案:

答案 0 :(得分:0)

首先,您在范围内使用浮点值,但此函数仅使用int参数。 你可以将No_bins转换为int,但我建议你用np.arange构建你的bin然后迭代它:

bins = np.arange(0, box, bin_size)
for k, bin in enumerate(bins):

您的错误来自np.any中的和。 没有为具有多个元素的数组定义和操作。 相反,你必须使用np.logical_and函数:

np.any(np.logical_and(data <= top_bin, data > bot_bin))

但是如果你想要建立一个直方图,numpy有一个函数:https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

bins = np.arange(0, box + bin_size, bin_size)
hist, _ = np.histogram(data, bins=bins)