我有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阵列的独特集合。
答案 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]]
这与这里的计数匹配: