如何跳过&x27;对于';处理numpy数组时循环

如何跳过&x27;对于';处理numpy数组时循环,numpy,Numpy,这是我的密码: import numpy as np >>> x array([[ 1, 57], [ 2, 21], [ 4, 34], ..., [3348, 29], [3350, 23], [3353, 11]]) >>> x.shape (1310, 2) >>> pic # greys

这是我的密码:

import numpy as np

>>> x
array([[   1,   57],
       [   2,   21],
       [   4,   34],
       ...,
       [3348,   29],
       [3350,   23],
       [3353,   11]])

>>> x.shape
(1310, 2)


>>> pic           # greyscale image

array([[223, 222, 225, ..., 217, 219, 214],
       [224, 222, 219, ..., 220, 219, 216],
       [223, 224, 220, ..., 219, 215, 213],
       ...,
       [228, 226, 231, ..., 224, 228, 229],
       [229, 227, 227, ..., 216, 225, 227],
       [226, 228, 225, ..., 218, 225, 230]], dtype=uint8)

pic = np.stack((pic,pic,pic), axis=2)

>>> pic.shape
(2208, 2752, 3)

>>>labels.shape
(2208, 2752)


color = [0, 0, 255]

for i in x:
    B=np.full((i[1],3), color).astype('int')
    pic[labels==i[0]]=B
它将灰度图像
(pic)
中的所有像素着色为蓝色
(rgb 0,0255)
,满足条件
pic[标签==i[0]]
。现在,这非常慢,因为使用了“for”循环
(对于x中的i)

是否有任何有效的“Numpy方式”,其中不包括for循环,以及 因此,速度会快得多。谢谢你的帮助


这个
pic[labels==i[0]]=B
甚至可以工作吗?我的意思是
pic
是单通道图像,而
B
是三通道图像。你能在手术后做
imshow()
吗?你能再解释一下你的代码吗?您的
标签在哪里/如何创建?
labels==i[0]
有效吗?看看
标签
i
的形状,我并不期望它会这样。在NumPy中,您几乎总能避免循环,但在这里很难帮助您。你能解释一下你想做什么,并告诉我们标签是什么样子的吗?我看不出最后一行是如何工作的,因为
B
是一个二维数组,您试图用它更改另一个二维数组的单个元素。如果你能花点时间制作一段真正运行的代码,用玩具数组来表示你的问题,那就容易多了。好吧,很抱歉,我没有在一开始就进一步澄清这个问题。。我正在用光学显微镜等拍摄一些合金微观结构的灰度图像。我的目标是分析给定阈值(像素计数)区域的数量(%),以及这些片段的数量、大小等。最后,我使用:从skimage导入度量,形态学,它找到这些段,每个段在标签矩阵中都有唯一的整数,它和pic的形状相同。我可以做所有的事情,除了给原始图像上的那些片段着色-没有for循环..因此,x中的每个项目都与一个片段相关,称为I,其中I[0]是它唯一的“序列”号,而I[1]是它的面积(像素数)。玩具代码:x=np.array([[1,3],[2,5],[6,2]]);标签=np.数组([[1,1,0,0,0],[1,0,0,2,0],[0,0,2,2],[0,0,0,2,0],[6,6,0,0,0]);pic=np.数组([[223222225224227],[222224218220221],[2162221219223225],[228226231224228],[226228225218225])。对于pic,我忘了将其转换为3通道灰度,当然:pic=np.stack((pic,pic,pic),axis=2)。它工作得很好,但我真的希望避免这种循环:)