当前位置: 首页 > 面试题库 >

如何在二维numpy数组中定位值的特定“区域”?

卫彭亮
2023-03-14
问题内容

我正在使用numpy101x101=10201值组成的2D数组。此类值的float类型在0.0到的范围内1.0。该数组具有一个X,Y始于左上角的坐标系:因此,位置(0,0)在左上角,而位置(101,101)在右下角。

这是2D数组的样子(摘录):

X,Y,Value
0,0,0.482
0,1,0.49
0,2,0.496
0,3,0.495
0,4,0.49
0,5,0.489
0,6,0.5
0,7,0.504
0,8,0.494
0,9,0.485

我希望能够:

1)计算值超过给定阈值的单元格区域数(见下图)0.3

2)确定这些区域的 视觉中心 与具有坐标的左上角之间的距离(0,0)

如何在Python 2.7中完成?

这是2D阵列的可视化表示,突出显示了2个区域( 颜色越深,值越高


问题答案:

您可以使用简单的布尔条件找到满足截止要求的像素,然后使用scipy.ndimage.labelscipy.ndimage.center_of_mass查找相连的区域并计算其质心:

import numpy as np
from scipy import ndimage
from matplotlib import pyplot as plt

# generate some lowpass-filtered noise as a test image
gen = np.random.RandomState(0)
img = gen.poisson(2, size=(512, 512))
img = ndimage.gaussian_filter(img.astype(np.double), (30, 30))
img -= img.min()
img /= img.max()

# use a boolean condition to find where pixel values are > 0.75
blobs = img > 0.75

# label connected regions that satisfy this condition
labels, nlabels = ndimage.label(blobs)

# find their centres of mass. in this case I'm weighting by the pixel values in
# `img`, but you could also pass the boolean values in `blobs` to compute the
# unweighted centroids.
r, c = np.vstack(ndimage.center_of_mass(img, labels, np.arange(nlabels) + 1)).T

# find their distances from the top-left corner
d = np.sqrt(r*r + c*c)

# plot
fig, ax = plt.subplots(1, 2, sharex=True, sharey=True, figsize=(10, 5))
ax[0].imshow(img)
ax[1].hold(True)
ax[1].imshow(np.ma.masked_array(labels, ~blobs), cmap=plt.cm.rainbow)
for ri, ci, di in zip(r, c, d):
    ax[1].annotate('', xy=(0, 0), xytext=(ci, ri),
                   arrowprops={'arrowstyle':'<-', 'shrinkA':0})
    ax[1].annotate('d=%.1f' % di, xy=(ci, ri),  xytext=(0, -5),
                   textcoords='offset points', ha='center', va='top',
                   fontsize='x-large')
for aa in ax.flat:
    aa.set_axis_off()
fig.tight_layout()
plt.show()


 类似资料:
  • 我有一个二维数组,如下所示 我要求用户给出一个数字。假设他给了20分。因此,我想编写代码,以迭代方式将该值与seatsPrices数组进行比较,并找到seatsPrices数组的任何I,j索引,其值为20,然后将其打印出来。我可能应该使用findAny(),但我不知道如何使用它。注意:我只需要找到一个“20”并停止。因此,使用两个嵌套循环会给我带来一些问题。

  • 问题内容: 我有一个二维的numpy数组,我有一个行和列的数组,应该将其设置为特定值。让我们考虑以下示例 我想修改行[0,2]和列[1,2]的条目。这应该导致以下数组 我做了以下操作,它导致修改了每一行中列的每个序列 结果导致以下数组修改了指定数组的每一列 有人可以让我知道怎么做吗? 非常感谢 编辑:要注意的是,行和列碰巧是偶然的。 实际的观点是,这些可以是任意的,也可以是任意顺序。如果它是row

  • 问题内容: 我想定义一个没有初始化长度的二维数组,如下所示: 但这不起作用… 我已经尝试过下面的代码,但是它也是错误的: 错误: 我怎么办呢? 问题答案: 从技术上讲,你正在尝试索引未初始化的数组。你必须先使用列表初始化外部列表,然后再添加项目。Python将其称为“列表理解”。 你现在可以将项目添加到列表中: 请注意,矩阵是地址主地址,换句话说,“ y索引”位于“ x索引”之前。 尽管你可以根据

  • 我无法让我的数组总结出特定的部分。 以下是我的课程说明: 编写一个程序来准备公司销售报告•该程序要求用户输入一周内三种产品的每日销售额。对3种产品和7天使用双2D阵列展示每种产品的销售额。然后,程序计算并显示以下内容:•一周内所有三种产品的销售总额。•所有产品的日平均销售额。•每种产品一周的销售总额。使用1D阵列保存每个产品的总销售额。•每种产品的日平均销售额周末所有产品的销售总额(假设第六天和第

  • 问题内容: 我试图根据条件计算某个值在多维数组中出现的次数。这是一个示例数组; 如果要显示所有绿色水果,可以执行以下操作(让我知道这是否是最佳方法); 这将输出; 太好了,我可以在那里看到它们是2个值,但是实际上我如何才能让PHP计算绿色的水果数量并将其放在变量中,以便我在脚本中进一步使用以解决问题?例如,我想做类似的事情; 我看过count(); 但是我看不到任何添加“ WHERE / cond

  • 但这涉及到寻找一个具有最大和的子数组,而不是已经给出的和。 我怎样才能有效地找到这个?这里可以用动态规划吗?请帮帮我。

  • 问题内容: 例如我有2个数组 我怎么能 和这样我得到 ? 问题答案: 您可以使用dstack: 如果必须有元组: 对于Python 3+,您需要扩展iterator对象。请注意,这是非常低效的: