Python 在二维numpy数组的移动窗口中计数整数的出现次数
我想计算每个整数,这个值在移动窗口中出现的频率。我不知道如何解决这个问题,因为我只能找到如何计算焦点平均值 因此,窗口的大小为:Python 在二维numpy数组的移动窗口中计数整数的出现次数,python,arrays,numpy,count,scipy,Python,Arrays,Numpy,Count,Scipy,我想计算每个整数,这个值在移动窗口中出现的频率。我不知道如何解决这个问题,因为我只能找到如何计算焦点平均值 因此,窗口的大小为: kernel =array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) 输入数据: input = array([[3, 3, 2, 3], [3, 1, 2, 3], [2, 1, 1, 1],
kernel =array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
输入数据:
input = array([[3, 3, 2, 3],
[3, 1, 2, 3],
[2, 1, 1, 1],
[3, 1, 3, 2]])
输出应如下所示:
第一个“层”计数为1,第二个“层”计数为2等
output = array([[[1, 1, 1, 0],
[2, 3, 4, 2],
[3, 4, 5, 3],
[2, 3, 4, 2]],
[[0, 2, 2, 0],
[1, 3, 2, 2],
[1, 2, 2, 2],
[1, 1, 1, 1]],
[[3, 3, 3, 2],
[3, 3, 3, 2],
[2, 3, 2, 2],
[1, 2, 1, 1]]])
输出应该是一个三维数组。x、 y表示原始数组的维数,z表示唯一整数的数量。每层显示每个唯一整数的计数
如果你对如何解决这个问题有任何指导,那就太好了 你能给我们展示一下这个示例的预期输出吗?你所说的“层”是什么意思?如果内核是3x3,你最终会得到2x2个窗口吗?输出在这方面没有意义。你有一个有效的解决方案吗,尽管是基于循环的?@smac89我指的是每一个z级别。因此,将三维阵列视为一组光栅,该层是每个单独的光栅。@Divakar 3*3窗口不是将窗口的中心单元格放置在输入光栅的每个单元格上,然后“查看”其周围的单元格吗?
import numpy as np
def focal_lcz_count(image, window_w, window_h, int_val):
w, h = image.shape
count_arr = np.zeros([w, h])
for i in range(w):
for j in range(h):
window = image[i:i+window_w, j:j+window_h]
np.zeros([w, h])
count_arr[i,j] = np.count_nonzero(window == int_val)
return count_arr
def list_focal_count(input_array,integer_list, window_size):
count_list = []
for i, item in enumerate(integer_list):
count_out = focal_lcz_count(image=input_array, window_w=window_size, window_h=window_size, int_val=item)
count_out = count_out.flatten()
count_list.append(count_out)
raster_array = np.asarray(count_list)
return count_list
input = np.random.randint(1, 4, ( 8, 8))
integ_list= [1,2,3]
result = list_focal_count(input_array=input,integer_list=integ_list, window_size=3)
print(result)