这其实算得上是一个图像处理中遇到的问题。 当我们读入一张彩色图像后,希望知道图像中所有RGB值等于对应值的位置 。例如,读入一张图片后,希望获取到所有像素值为(100,100,100)的像素点的坐标。首先,做一个实验。

import numpy as np
img = np.random.randint(0, 255, [3, 3, 3])  # 随机生成一个3*3*3的矩阵,模拟RGB图
color = [100, 100, 100]                     # 目标颜色三通道值
img[1, 1, :] = [100, 100, 100]              # 使(1,1)处的值为所需值
location = (img == color)
print(location)
[[[False False False]
  [False False False]
  [False False False]]
 [[False False False]
  [ True  True  True]
  [False False False]]
 [[False False False]
  [False False False]
  [False False False]]]

  这样的一个实验得到的location是三维的Bool类型数组,而我们需要的其实是二维的数组。所以此时一般的思路就是,三个通道取与。

import numpy as np
img = np.random.randint(0, 255, [3, 3, 3])  # 随机生成一个3*3*3的矩阵,模拟RGB图
color = [100, 100, 100]                     # 目标颜色三通道值
img[1, 1, :] = [100, 100, 100]              # 使(1,1)处的值为所需值
location = (img == color)
# location = location[:, :, 0] * location[:, :, 1] * location[:, :, 2]
location = location[:, :, 0] & location[:, :, 1] & location[:, :, 2]
print(location)
[[False False False]
 [False  True False]
 [False False False]]

  但是再仔细一想,Numpy中有一个取与的函数 np.all() ,所以我们上面的代码可以直接简化。

import numpy as np
img = np.random.randint(0, 255, [3, 3, 3])  # 随机生成一个3*3*3的矩阵,模拟RGB图
color = [100, 100, 100]                     # 目标颜色三通道值
img[1, 1, :] = [100, 100, 100]              # 使(1,1)处的值为所需值
location = np.all((img == color), axis=2)	# 在第二个维度上取与
print(location)

  这样一行简单的代码就可以简单地得到三个通道值等于指定值位置。同样的道理,更高维度的数组也能进行这样的操作。

前言  这其实算得上是一个图像处理中遇到的问题。当我们读入一张彩色图像后,希望知道图像中所有RGB值等于对应值的位置。例如,读入一张图片后,希望获取到所有像素值为(100,100,100)的像素点的坐标。首先,做一个实验。代码import numpy as npimg = np.random.randint(0, 255, [3, 3, 3]) # 随机生成一个3*3*3的矩阵,模拟RGB图color = [100, 100, 100] # 目标颜色三通 c = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]) print(c.mean(axis=1))#行 print(c.mean(axis=0))#列 [ 2.5 5.5 8.5] [ 4. 5. 6. 7.] 以上这篇python NumPy ndarray二维数组 按照行列求平均实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:对python中字典keys,values,it
最近需要从热力图中找出关键点的坐标,也就是极大的行和列。搜寻了网上的一些方法,在这里总结一下。使用numpy进行多维数组中最大的行和列搜寻非常的灵活,有以下几种方法可供参考。 方法一:np.max()函数 + np.where()函数 如下图所示,x是一个 3×3 的二维np.array,首先使用np.max(x)求出x中的最大,然后使用np.where函数找出数组x中最大所在的位置。当然这只是np.where的其中一种用法,np.where是一个非常方便的函数,用法还有很多,具体可
今天做数据处理时,遇到了从三维数组中批量加入二维数组的需求。其中三维数组在深度学习的特征数据处理时经常会使用到,所以读者有必要对该小知识点做到清楚了解并掌握。现对三维数组中的元素位置结合代码做详细归纳总结,方便日后查阅和为网友答疑! 图示效果图: 直接贴代码: def test3D(): import numpy as np data_array = np.zeros((3, 5, 6), dtype=np.int) data_array[1, 2, 2] = 1 print(data_array) 介绍:通过np.zeros创建一个3行5列6个通道的三维数组,并给第二个通道的第一
本人也是新手,需要实现什么功能很多时候就是谷歌搜,一搜搜好几个才能解决问题,就像本文这个问题,我搜索到很多结果就只能找到第一个元素的索引,根本就文不是我想要的,反正大佬八成也看不到这篇文章,就随便写写啦 本文使用python自...
本文实例讲述了动态规划之矩阵连乘问题Python实现方法。分享给大家供大家参考,具体如下: 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 A1={30×35} ; A2={35×15} ;A3={15×5} ;A4={5×10} ;A5={10×20} ;A6={20×25} ; 结果为:((A1(A2A3))((A4A5)A6))  最小的乘次为15125。 原问题为n个矩阵连乘,将原问题分解为子问题,即当n等于1,2,3…..时。 n==1时,单一矩阵,不