查找python矩阵中最大元素,Python-在2D numpy数组中查找特定值最大面积的有效方法...

I have a 2D numpy array where some values are zero, and some are not. I'm trying to find an efficient way to find the biggest clump of zeros in the array (by returning the number of zeros, as well as a rough idea of where the center is)

For example in this array, I would like to find the clump of 9, with the center of (3,4):

[[ 1, 1, 1, 0, 0 ],

[ 1, 0, 1, 1, 0 ],

[ 1, 1, 1, 1, 1 ],

[ 1, 1, 0, 0, 0 ],

[ 1, 1, 0, 0, 0 ],

[ 1, 1, 0, 0, 0 ]]

Is there a nice vectorized way to accomplish something like this in numpy or scipy?

The clumps will be roughly circular in shape, and have no holes in them.

ndimage.label() from scipy does something close to this, but isn't quite what I'm after. I have a feeling numpy.where() and numpy.diff() could be helpful, but not sure how to efficiently use them to solve this problem.

解决方案

You're almost there, you just need to combine ndimage.label with numpy.bincount:

import numpy as np

from scipy import ndimage

array = np.random.randint(0, 3, size=(200, 200))

label, num_label = ndimage.label(array == 0)

size = np.bincount(label.ravel())

biggest_label = size[1:].argmax() + 1

clump_mask = label == biggest_label

Once you have clump_mask you can compute the centroid or use some other method to get the center.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值