精华内容
下载资源
问答
  • 上面的例子是使用numpy.where()得到二维数组中符合条件的数据的索引, 位置是以tuple的形式返回的: tuple里每个元素(array)可以理解为对应axis上的坐标 这里numpy中是先行后列的坐标,行index,列index 推广...

    上面的例子是使用numpy.where()得到二维数组中符合条件的数据的索引,

    位置是以tuple的形式返回的:

    tuple里每个元素(array)可以理解为对应axis上的坐标

    这里numpy中是先行后列的坐标,行index,列index

    推广到更高维数组的情况:

    可以先看我另一篇文章讲高维数组读法的↓↓↓

    python numpy高维数组(三维数组) reshape操作+order详解+numpy高维数组的读法详解_プロノCodeSteel-CSDN博客

    以右侧shape的数组为例 (10,9,8,7)

    使用numpy.where()按条件搜索单个值则会返回length为4的tuple

    如果想要定位是高维数组里的低维数组:

    比如是一张BGR格式的图片

    shape: (410,820,3)    设变量为 image

    需要定位每一个[255,255,255]的数组

    则可以使用一个shape: (410,820)的有值的数组 设为 loc,对其使用numpy.where(),用返回的tuple选取需要的低维数组

    代码:(这种写法应该是隐式调用了numpy.where())

    needed = image[loc==0]

    发现上面这个例子不够清楚,给个例子:属于传统ComputerVision的,一个使用CCA识别物体并使用不同颜色标记目标的代码

    用法这一行代码是

    labeled_img[label_hue == 0] = 0

    例子:

    import sys
    import cv2
    from matplotlib import pyplot as plt
    import numpy as np
    import copy
    from Threshold_Based_Segmentation1 import calc_hist
    
    show_img = False
    data_dir = './data/2/'
    
    src = cv2.imread(str(data_dir + 'birds.jpg'), cv2.IMREAD_GRAYSCALE)
    
    ############################################## 1 get histogram #########################################################
    calc_hist(data_dir, 'bird_', src)
    print(src.shape)
    
    ################################################ 2 Threshold ###########################################################
    ret, thresh = cv2.threshold(src, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)  # black birds
    cv2.imwrite(str(data_dir + 'birds_otsu_thres.jpg'), thresh)
    # print(ret)  # 171
    # use self defined threshold to segment
    _, thresh = cv2.threshold(src, 75, 255, cv2.THRESH_BINARY_INV)  # white birds
    cv2.imwrite(str(data_dir + 'birds_t75_thres.jpg'), thresh)
    
    ######################################### 3 Binary Morphology: Opening ###############################################
    # OpenCV set a SE
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    
    # Do erosion to img
    # !!!特别注意,如果目标是黑色的,那么erode 和 dilate操作将会相反,因为黑色恰好值为0
    eroded = cv2.erode(thresh, kernel)
    # 显示腐蚀后的图像
    if show_img:
        cv2.imshow("Eroded Image", eroded)
    cv2.imwrite(str(data_dir + 'birds_t75_thres_eroded.jpg'), eroded)
    
    # 膨胀图像
    dilated = cv2.dilate(thresh, kernel)
    # 显示膨胀后的图像
    if show_img:
        cv2.imshow("Dilated Image", dilated)
    cv2.imwrite(str(data_dir + 'birds_t75_thres_dilated.jpg'), dilated)
    
    # opening 操作,disconnected
    eroded = cv2.erode(thresh, kernel,iterations=2)
    dilated = cv2.dilate(eroded, kernel,iterations=2)
    if show_img:
        cv2.imshow("opening Image", dilated)
    cv2.imwrite(str(data_dir + 'birds_t75_thres_opening2times.jpg'), dilated)
    
    if show_img:
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    
    ########################################## 4 Connected-component labeling ###############################################
    
    
    def cca(thresh, connectivity, background=0):
        """Label connected regions of an integer array.
        https://scikit-image.org/docs/stable/api/skimage.measure.html#skimage.measure.label
    
        Args:
            thresh: The binary thresh image
            connectivity: 4 or 8, default 8
            background: int, optional (not implemented)
        Returns:
            return labels(Labeled array, where all connected regions are assigned the same integer value.),num(Number of labels, which equals the maximum label index)
        """
        labels = np.zeros_like(thresh)
        # padding the image for ease of scanning
        padded = np.pad(thresh, pad_width=((1, 1), (1, 1)), constant_values=0)
        shape = labels.shape
        num = 1
        equals = {}
        # first run: label new number or lowest in the neighbor
        for y in range(1, shape[0] + 1):
            for x in range(1, shape[1] + 1):
                if connectivity == 8:
                    if padded[y + 1, x + 1] == 0:
                        continue
                    else:
                        square = labels[y - 1:y + 2, x - 1:x + 2]
                        neighbors = list(set(square.flatten()) - set([0]))
                        if len(neighbors) == 0:
                            labels[y, x] = num
                            equals[num] = [num]
                            num += 1
                        else:
                            labels[y, x] = min(neighbors)
                            if equals.get(min(neighbors)) is None:
                                equals[labels[y, x]] = neighbors
                            else:
                                equals[labels[y, x]] += neighbors
                                # equals[labels[y, x]] = list(set(equals[labels[y, x]]))
                elif connectivity == 4:  # 全是bug按照上面的改
                    if padded[y - 1, x - 1] == 0:
                        continue
                    else:
                        cross = [labels[y - 2, x - 1], labels[y, x - 1], labels[y - 1, x - 2], labels[y - 1, x]]
                        neighbors = list(set(cross.flatten()) - set([0]))
                        if len(neighbors) == 0:
                            labels[y - 1, x - 1] = num
                            equals[num] = [num]
                            num += 1
                        else:
                            labels[y - 1, x - 1] = min(neighbors)
                            if equals.get(min(neighbors)) is None:
                                equals[labels[y - 1, x - 1]] = neighbors
                            else:
                                equals[labels[y - 1, x - 1]] += neighbors
                                # equals[labels[y - 1, x - 1]] = list(set(equals[labels[y - 1, x - 1]]))
    
        # second run: replace label with lower number in equations
        # 1 : [2,3,5] The right only records those that are higher than the left
        # 2 : [7]
        # 所有dict转化成list, key 加到 value list里面
        equal_list = []  # 储存所有等价关系
        for key in equals:
            equals[key].append(key)
            equals[key] = list(set(equals[key]))
            equal_list.append(equals[key])
        # 合并有相同项的list,并移除其中一个
        # logic
        # 1. 只要找到有交集的list就合并,并重新开始对于list的循环
        # 2. 对所有list循环完成并未找到有交集的list,停止合并
        # final_equal = copy.deepcopy(equal_list)
        # l = len(equal_list)
        done = False
        outer_break = False
        while True:
            if done:
                break
            outer_break = False
            for i in range(len(equal_list)):
                for j in range(len(equal_list)):
                    if i == len(equal_list) - 1 and j == len(equal_list) - 1:
                        done = True
                    if i == j:
                        continue
                    else:
                        if len(list(set(equal_list[i]) & set(equal_list[j]))) != 0:
                            equal_list[i] += equal_list[j]
                            equal_list[i] = list(set(equal_list[i]))
                            equal_list.pop(j)
                            # 这时list已经发生改变,需要新的大循环
                            outer_break = True
                            break
                if outer_break:
                    break
        # 3.对每一个list进行升序排序
        for i in range(len(equal_list)):
            equal_list[i] = sorted(equal_list[i])
        # 4.relabelling
        count = 1
        for item in equal_list:
            # item : [1,2,3,4]
            for i in item:
                labels[labels == i] = count
            count += 1
        return labels, len(equal_list)
    
    
    # You need to choose 4 or 8 for connectivity type
    use_self_func = True
    # use_self_func = False
    connectivity = 8
    if use_self_func:
        labels, num_labels = cca(thresh, connectivity)
        print(num_labels)  #
    else:
        # Perform the operation
        output = cv2.connectedComponentsWithStats(thresh, connectivity, cv2.CV_32S)
        # Get the results
        # The first cell is the number of labels
        num_labels = output[0]
        print(num_labels)  # 49
        # label matrix: the same spatial dimensions as our input thresh
        labels = output[1]
        # The third cell is the stat matrix
        stats = output[2]
        # The fourth cell is the centroid matrix
        centroids = output[3]
    
    print(labels.shape)  # (492, 800)
    print(type(labels))
    ################################################ 5 coloring ############################################################
    # read in BGR
    src_color = cv2.imread(str(data_dir + 'birds.jpg'), cv2.IMREAD_COLOR)
    print(src_color[0, 0, 1])
    
    # creat color series
    label_arr = np.arange(0, num_labels, 1)
    
    
    def imshow_components(labels):
        # Map component labels to hue val
        label_hue = np.uint8(179.0 * labels / np.max(labels))
        blank_ch = 255 * np.ones_like(label_hue)
        labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])
    
        # cvt to BGR for display
        labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)
    
        # set bg label to black
        labeled_img[label_hue == 0] = 0
    
        # cv2.imshow('labeled.png', labeled_img)
        # cv2.waitKey()
        return labeled_img
    
    
    labeled_img = imshow_components(labels)
    cv2.imwrite(str(data_dir + 'birds_t75_thres_colored_blackBG.jpg'), labeled_img)
    
    # color the birds
    for x in range(labels.shape[0]):
        for y in range(labels.shape[1]):
            # cannot judge by single value of B/G/R
            if np.sum(labeled_img[x, y]) != 0:
                src_color[x, y, :] = labeled_img[x, y, :]
    
    cv2.imwrite(str(data_dir + 'birds_t75_thres_colored.jpg'), src_color)
    cv2.imshow('colored.png', src_color)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    展开全文
  • Numpy 数组如果想根据条件批量修改元素的值可以使用 numpy.where() 函数。 描述 numpy.where(condition[, x, y]) 第一参数 condition 是条件,条件成立,返回 x 作为元素的值;否则,返回 y 作为元素值。 示例 单...


    引言

    Numpy 数组如果想根据条件批量修改元素的值可以使用 numpy.where() 函数。

    描述

    numpy.where(condition[, x, y])

    第一参数 condition 是条件,条件成立,返回 x 作为元素的值;否则,返回 y 作为元素值。

    示例

    单条件

    >>> import numpy as np
    >>> a = np.arange(10)
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.where(a < 5, a, 10*a)
    array([ 0,  1,  2,  3,  4, 50, 60, 70, 80, 90])
    

    多条件

    >>> import numpy as np
    >>> a = np.arange(10)
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.where((a > 3) & (a < 7), a, 10*a)
    array([ 0, 10, 20, 30,  4,  5,  6, 70, 80, 90])
    

    参考

    https://numpy.org/doc/stable/reference/generated/numpy.where.html

    展开全文
  • 如何查看numpy中的函数的用法你想要运行教程中的示例,你至少需要在你的电脑上安装了以下一些软件: Python NumPy 这些是可能对你有帮助的: ipython是一个净强化的交互Python Shell,对探索NumPy的特性非常方便。...

    如何查看numpy中的函数的用法

    你想要运行教程中的示例,你至少需要在你的电脑上安装了以下一些软件: Python NumPy 这些是可能对你有帮助的: ipython是一个净强化的交互Python Shell,对探索NumPy的特性非常方便。 matplotlib将允许你绘图 Scipy在NumPy的基础上提供了很多科学

    在python中,怎么查看numpy模块中的exp函数源代码

    2985a332725b4021f921a62e39910a4e.png

    numpy log函数中,5为底数25的对数怎么表示

    使用换底公式,或者使用math.log numpy换底公式,计算以a为底,b的对数 import numpy as np np.log(b)/np.log(a) math.log,计算以a为底,b的对数 import math math.log(b,a)

    numpy的ones函数返回的是什么类型

    ones()函数用以创建指定形状和类型的数组,默认情况下返回的类型是float64。但是,如果使用ones()函数时指定了数据类型,那么返回的就是该类型。 参考NumPy v1.11官方手册中对ones()函数的描述: numpy.ones(shape, dtype=None, order='C') 其中

    python里的numpy工具里,fromarray()函数是怎么这个工具是PIL里的 image工具。

    matlab的互相关函数xcorr()和numpy的互相关函数num...因为python与matlab是两种不同编程语言。python是一种动态的、面向对象的脚本语言,而matlab是面向对象的解释性语言。所以执行同样的函数python的运行速度要比matlab快。

    numpy的COV函数,究竟是什么计算

    multiply是numpy的ufunc函数,执行方法是对应元素相乘,而不是线性代数中的矩阵运算方式,类似于matlab中的点乘,当矩阵的维度不相同时,会根据一定的广播规则将维数扩充到一致的形式,例如上面的a就广播为5行5列的数组,每一行都是1,2,3,4,5。

    python有numpy函数库么

    python可以安装numpy函数库 可以用python自带的安装工具,pip install numpy scipy 等。如果没有pip的话,可以试试easy-install numpy scipy。打开cmd,在里面输入这些命令。 不想自己一个一个装的话,最简单的方法是安装python(x,y)套装。

    为什么random.shuffle([1,2,3,4])返回值是None

    random.shuffle 并不返回一个list。正确用法是: number_list = [1,2,3,4] random.shuffle( number_list ) print number_list

    numpy函数 arange([start,] stop[, step,], dtype=[start,] stop[, step,] 怎么理解?

    欢迎来到夜影驱动编程,arange()是一个划定数组元素范围的函数。python的range()函数和它类似。 import numpy as nparr1 = np.arange(3,10,2) #3是开始,10是结束,2是步长print arr1结果 [3 5 7 9] 总结:如上图,所示。

    展开全文
  • Python numpy.where() 用法

    2021-01-02 12:58:53
    numpy.where (condition[, x, y]) numpy.where() 有两种用法: np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x...

    numpy.where (condition[, x, y])

    numpy.where() 有两种用法:

    1. np.where(condition, x, y)
      满足条件(condition),输出x,不满足输出y。

    如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]

    aa = np.arange(10)
    np.where(aa,1,-1)

    array([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # 0为False,所以第一个输出-1
    np.where(aa > 5,1,-1)
    array([-1, -1, -1, -1, -1, -1, 1, 1, 1, 1])

    np.where([[True,False], [True,True]], # 官网上的例子
    [[1,2], [3,4]],
    [[9,8], [7,6]])

    array([[1, 8],
    [3, 4]])
    上面这个例子的条件为[[True,False], [True,False]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。类似的问题可以再看个例子:

    a = 10
    np.where([[a > 5,a < 5], [a == 10,a == 7]],
    [[“chosen”,“not chosen”], [“chosen”,“not chosen”]],
    [[“not chosen”,“chosen”], [“not chosen”,“chosen”]])

    array([[‘chosen’, ‘chosen’],
    [‘chosen’, ‘chosen’]], dtype=’<U10’)

    1. np.where(condition)
      只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

    a = np.array([2,4,6,8,10])
    np.where(a > 5) # 返回索引

    (array([2, 3, 4]),)

    a[np.where(a > 5)] # 等价于 a[a>5]

    array([ 6, 8, 10])

    np.where([[0, 1], [1, 0]])

    (array([0, 1]), array([1, 0]))
    上面这个例子条件中[[0,1],[1,0]]的真值为两个1,各自的第一维坐标为[0,1],第二维坐标为[1,0] 。

    下面看个复杂点的例子:

    a = np.arange(27).reshape(3,3,3)
    a

    array([[[ 0, 1, 2],
    [ 3, 4, 5],
    [ 6, 7, 8]],
    [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],
    [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]])

    np.where(a > 5)

    (array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
    array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]),
    array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]))

    #符合条件的元素为

       [ 6,  7,  8]],
    
      [[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]],
    
      [[18, 19, 20],
       [21, 22, 23],
       [24, 25, 26]]]
    

    所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。

    展开全文
  • 当我运行此代码时:import numpy as npa = np.array([1, 2, 3, 4, 5, 6])print(np.where(a > 2))获得一个指数数组是很自然的,其中一个> 2,即[2,3,4,5],但我们得到:(array([2, 3, 4, 5], dtype=int64),)即一个...
  • 实践: index_0 = np.where(maxtide_surge[site]<=0) 参考链接
  • numpy.argwhere 与 numpy.where的区别

    千次阅读 2021-03-29 09:27:18
    ar = np.array([1,2,3,4]) ...class 'numpy.ndarray'> [[3]] ar = np.array([1,2,3,4]) b = np.where(ar==4) print(type(b)) print(b) #结果: <class 'tuple'> (array([3], dtype=int64),)
  • 首先看源码,如下:where(condition, [x, y])Return elements, either from `x` or `y`, depending on `condition`.If only `condition` is given, return ``condition.nonzero()``.Parameters----------condition :...
  • Python中的函数数不胜数,今天小编就numpy.where()函数的使用为大家带来讲解。numpy.where(condition [,x,y])函数返回满足给定条件的输入数组中元素的索引。参数:condition :When True, yieldx, otherwise yield y...
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?...示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码
  • 首先numpy.where(condition, x=None, y=None)可接收三个参数,condition表示待操作的numpy.array类型数组的逻辑判断, x和y是可选参数。 用法一: 当x,y为默认值时,对应用法一,此时where的作用为寻找在参数...
  • 这篇文章帮助学习者了解下numpy的两个函数,dot和trace numpy.dot 这个函数实现的是矩阵乘法 官方文档如下: numpy.dot(a, b, out=None) Dot product of two arrays. Specifically, If both a and b are 1...
  • numpy.where的一种用途

    2021-07-18 14:10:59
    numpy.where有几种用途,此处先介绍一种: np.where(condition) return 符合条件的元素在原始列表中的坐标。: import numpy as np z = np.ones((2, 2)) z[0][1] = 2 print(z) #[[2. 1.] # [1. 1.]] print(np.where...
  • numpy 查找元素位置 numpy.where

    千次阅读 2021-03-13 17:01:29
    numpy.where(condition,x,y) 详细用法请大家详见官方文档 这里举几个例子 import numpy as np a=np.array([1,2,3,4,5]) print(np.where(a<3))#查找小于3的元素的位置 结果 (array([0, 1], dtype=int64),) 注意...
  • numpy.where的使用举例

    2021-01-15 09:38:32
    参考链接: numpy.where(condition[, x, y]) 实验代码展示: Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license...
  • numpy.where()函数

    2021-01-01 02:40:08
    numpy.where()调用方法 numpy.where(condition[, x, y]) 各个参数意义: condition:类似数组的对象,布尔值 x, y:类似数组的对象,给出值的地方,如果condition为True,从x中选取值,condition为False,从y中选...
  • numpy.where(condition)的使用 搜到的都是到最后一个想看解释的时候戛然而止…… numpy.where(condition)返回的是位置信息,有x和y参数的时候才会返回x或者y中的信息。 看下面这个例子详细说明。 返回的就是三个...
  • numpy.where 小坑备忘

    2021-04-25 13:05:05
    import numpy as np gnd = np.array([1,1,1,1,1,0,0,0,0,0]) test_indx = np.array([1,3,6,7]) selected_index = np.where(gnd[test_indx] == 1)[0] print(selected_index) # 此处的index 是针对 gnd[test_indx] ...
  • df['L值高低'] = np.where(df['Loyalty'] > l, "high", "low") df['F值高低'] = np.where(df['Frequency'] > f, "high", "low") df['M值高低'] = np.where(df['Monetary'] > m, "high", "low")
  • pthon中numpy.where的用法

    2021-04-07 19:11:11
    numpy.where(condition, x, y) 第一种用法 给定condition 以及x和y,当condition为真时,返回x,condtion为假时,返回y,返回值都是数组形式的。 import numpy as np ##数值示例 x = 3 print(np.where(x > 1, 1, ...
  • numpy.random模块中常用函数解析1. numpy.random.rand(d0, d1, ..., dn)Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1)按照给定形状产生一个...
  • numpy.nonzero()2. numpy.argwhere() 0. 前言 在各类深度学习的过程中, 难免对非零元素进行处理.在Numpy中,提供了多种非零元素处理的接口和syntactic sugar. 其中就包括 numpy.nonzero() 与 numpy.argwhere()这两个...
  • numpy.linspace(start, stop, num=50, endpoint=true, retstep=false, dtype=none)在指定的间隔内返回均匀间隔的数字。返回num均匀分布的样本,在[start, stop]。这个区间的端点可以任意的被排除在外。parameters...
  • Python中的numpy.append()

    千次阅读 2021-01-28 17:39:44
    Python numpy append() function is used to merge two arrays. This function returns a new array and the original array remains unchanged.Python numpy append()函数用于合并两个数组。 该函数返回一个新数组...
  • 仅作为记录,大佬请跳过。 保存成文件 import numpy numpy.savetxt("result.txt", img_bin) 找元素的位置 numpy.where(img_bin==255)
  • [转载] numpy.ma详解

    2021-01-23 16:34:12
    参考链接: Python中的numpy.asanyarray numpy.ma numpy.ma模块 基本原理 当数组元素包括缺失值或异常值时,该数组被称为掩码数组。numpy.ma模块的工作方式可以这么来解释:支持数值数组中包含掩码元素。 ...
  • 下面再举两个求最小二乘解的例子,并使用**numpy.linalg模块的lstsq()**函数求解. 先要明确这个函数的原义是用来求超定线性方程组的: 例如下面的方程组: 系数矩阵的第一列相当于给定了x的观测值 X=[0,1,2,3]...
  • Numpy.exp函数的用法

    2021-08-30 10:14:09
    *numpy.exp(x, /, out=None, , where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) = <ufunc ‘exp’> 参数注释: x:位置参数,输入值,矩阵参数; out:可变参数...
  • I have a numpy histogram that I would like to output as a tab-delimited text file. My code is below:targethist = np.histogram(targetlist, bins=ilist)print targethistnp.savetxt('ChrI_dens.txt',targethi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,941
精华内容 15,976
关键字:

numpy.where