Python:从2个1D阵列计算点数

时间:2017-10-12 21:14:48

标签: python arrays counting

我有2个1D阵列的数据集。我的目标是计算网格每个部分中的点数(使用我选择的大小)。

plt.figure(figsize=(8,7))
np.random.seed(5)
x = np.random.random(100)
y = np.random.random(100)

plt.plot(x,y,'bo')
plt.grid(True)

我的情节

我希望能够将每个部分拆分成2个1D或1个2D阵列的独特集合。

2 个答案:

答案 0 :(得分:1)

import numpy as np

def split(arr, cond):
  return [arr[cond], arr[~cond]]

a = np.array([1,3,5,7,2,4,6,8])
print split(a, a<5)

这将返回包含[1,2,3,4]和[5,6,7,8]的两个数组的列表。

根据您设定的条件尝试使用此功能(似乎是0.2的间隔)

注意:要正确解决您的问题,您必须修改拆分功能,以便将数据拆分为两个以上的部分。我将此作为练习留给你做:)

答案 1 :(得分:0)

此函数接收两个1D数组并返回一个2D矩阵,其中每个元素是网格部分中与您的图像对应的点数:

import numpy as np

def count_points(arr1, arr2, bin_width):
    x = np.floor(arr1/bin_width).astype(int) # Bin number for each value
    y = np.floor(arr2/bin_width).astype(int) # Bin number for each value
    counts = np.zeros(shape=(max(x)+1, max(y)+1), dtype=int)
    for i in range(x.shape[0]):
        row = max(y) - y[i]
        col = x[i]
        counts[row, col] += 1
    return counts

请注意,x和y不与列和行索引对齐,因为原点位于绘图的左下角,但矩阵的“origin”(索引[0,0]`)是左上角。我重新排列了矩阵,使元素与你在照片中看到的一致。

示例:

np.random.seed(0)
x = np.random.random(100)
y = np.random.random(100)
print count_points(x, y, 0.2) # 0.2 matches the default gridlines in matplotlib

# Output:
#[[8 4 5 4 0]
# [2 5 5 7 4]
# [7 1 3 8 3]
# [4 2 5 3 4]
# [4 4 3 1 4]]

这与这里的计数匹配:

enter image description here