Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在二维numpy数组的移动窗口中计数整数的出现次数_Python_Arrays_Numpy_Count_Scipy - Fatal编程技术网

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)