python array矩阵相关操作

news/2024/12/2 12:04:35/

目录:

一、判断某个值是否在array二维数组的某列中

二、根据某列中的特定值筛选array数组

三、查找一个元素在二维 array 矩阵中的位置

四、判断array数组中的每个元素是否包含特定的子字符串

一、判断某个值是否在array二维数组的某列中

在 Python 中,如果你使用的是 numpy 数组,可以使用 numpy 提供的方法来判断某个值是否在数组的某一列中。这里有一个例子:

1、使用切片操作提取列(前提是 numpy 数组 array

假设你有一个 numpy 数组 array,并且你想判断某个值是否在该数组的某一列中。

 示例代码:

python">import numpy as np# 示例 2D 数组
array = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 要查找的值
value = 5# 指定列索引 (例如第二列,即索引为1)
column_index = 1# 判断值是否在指定的列中
if value in array[:, column_index]:print(f"{value} 在第 {column_index+1} 列中")
else:print(f"{value} 不在第 {column_index+1} 列中")

解释:

  1. array[:, column_index]切片操作,用于提取指定列的所有元素

    • : 表示选择所有行。
    • column_index 是你想查找的列的索引(从0开始)。
  2. 使用 in 关键字判断该值是否存在于该列中。

输出:

python">5 在第 2 列中

如果你没有使用 numpy 而是使用原生的 Python 列表,代码会稍有不同。

2、 使用 Python 原生列表(二维列表)示例:

python"># 示例 2D 列表
array = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]# 要查找的值
value = 5# 指定列索引 (例如第二列,即索引为1)
column_index = 1# 提取该列
column = [row[column_index] for row in array]# 判断值是否在指定的列中
if value in column:print(f"{value} 在第 {column_index+1} 列中")
else:print(f"{value} 不在第 {column_index+1} 列中")

 输出:

python">5 在第 2 列中

这种方法适用于 Python 原生的二维列表结构。

二、根据某列中的特定值筛选数组

1、是numpy的array数组

在 Python 中,如果你使用的是 numpy 数组,可以利用布尔索引来根据某列的值筛选数组

示例代码:

假设你有一个 numpy 数组 array,并且你想根据某列的值筛选数组中的行。

python">import numpy as np# 示例 2D 数组
array = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[4, 10, 11]])# 筛选条件:根据第二列的值筛选
column_index = 1
value = 5# 筛选出第二列等于5的所有行
filtered_array = array[array[:, column_index] == value]print(filtered_array)

解释:

  1. array[:, column_index] 提取数组的指定列(通过索引选择)。
  2. array[:, column_index] == value 会生成一个布尔数组,表示该列中哪些值等于 value
  3. 使用该布尔数组来索引原数组,返回符合条件的所有行。

输出: 

python">[[4 5 6]]

在这个例子中,输出为所有第二列值为 5 的行。

2、是python原生列表构成的二维数组

 如果你没有使用 numpy,而是使用原生的 Python 列表,可以使用类似的方法,通过列表推导式筛选。

python"># 示例 2D 列表
array = [[1, 2, 3],[4, 5, 6],[7, 8, 9],[4, 10, 11]]# 筛选条件:根据第二列的值筛选
column_index = 1
value = 5# 使用列表推导式筛选
filtered_array = [row for row in array if row[column_index] == value]print(filtered_array)

输出: 

python">[[4, 5, 6]]

 这种方法适用于原生 Python 列表结构。

三、查找一个元素在二维 array 矩阵中的位置 

假设你有一个二维矩阵 matrix,你要查找某个元素的位置。

方法 1: 使用 numpy 库

numpy 是一个高效的数值计算库,可以方便地进行数组操作。

python">import numpy as np# 创建一个二维数组
matrix = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 查找元素的索引
element = 5
result = np.where(matrix == element)# 输出位置 (返回的是元组形式)
print("元素的位置是:", result)

np.where(matrix == element) 会返回一个元组,表示符合条件的元素的行和列索引。

输出

python">元素的位置是: (array([1]), array([1]))

在这个例子中,5 出现在矩阵的第 2 行(索引 1)第 2 列(索引 1)。

方法 2: 使用列表推导式

如果你不想使用 numpy 库,可以使用纯 Python 的方法来查找元素的位置。

python"># 创建一个二维数组
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]# 查找元素的位置
element = 5
position = Nonefor i, row in enumerate(matrix):if element in row:position = (i, row.index(element))break# 输出位置
print("元素的位置是:", position)

输出: 

python">元素的位置是: (1, 1)

在这个例子中,5 位于矩阵的第 2 行(索引 1),第 2 列(索引 1)。

方法 3: 使用 for 循环

你也可以使用嵌套 for 循环来遍历矩阵,找到元素的位置。

python"># 创建一个二维数组
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]# 查找元素的位置
element = 5
position = Nonefor i in range(len(matrix)):for j in range(len(matrix[i])):if matrix[i][j] == element:position = (i, j)breakif position:break# 输出位置
print("元素的位置是:", position)

输出

python">元素的位置是: (1, 1)

总结

  • 如果你使用 numpy 库,np.where() 是一种非常简洁高效的方式。
  • 如果不使用外部库,可以通过嵌套 for 循环或者列表推导式来查找元素的位置。

 

四、判断array数组中的每个元素是否包含特定的子字符串 

示例:

python">import numpy as nporigin_array = np.array(["abc.", "def.", "abc.abc.", "ghi"])
elem = "abc"
judge_array = np.char.count(origin_array, elem + ".") != 0
print(judge_array)

输出:

python">[ True False  True False]

解释:

  • 第一个元素 "abc." 包含了 "abc.",所以为 True
  • 第二个元素 "def." 不包含 "abc.",所以为 False
  • 第三个元素 "abc.abc." 包含了 "abc.",所以为 True
  • 第四个元素 "ghi" 不包含 "abc.",所以为 False

逐步分析:

  1. origin_array: 假设它是一个 NumPy 数组,里面的每个元素可能是字符串类型(例如,形如 ["abc.", "def.", "ghi."])。
  2. elem: 假设这是一个字符串变量,它可能是任意的,如 "abc" 或 "def"
  3. elem + ".": 这表示将字符串 elem 和字符 "." 拼接起来,生成一个新的字符串。例如,如果 elem = "abc",那么 elem + "." 就是 "abc."
  4. np.char.count(origin_array, elem + ".")np.char.count 会返回一个数组,其中每个元素表示在 origin_array的相应位置中,子字符串 elem + "." 出现的次数。
    • 例如,如果 origin_array= ["abc.", "abc.abc.", "xyz."] 且 elem="abc",则 np.char.count 会返回一个数组 [1, 2, 0],因为 "abc." 在第一 个元素中出现一 次,在第二个元素中出现两次,而在第三个元素中没有出现。
  5. np.char.count(origin_array, elem + ".") != 0: 这一部分检查每个元素的出现次数是否不等于零。即,如果某个元素中包含了 elem + "."(即 abc. 或其他),它将返回 True,否则返回 False

最终效果:

judge_array 是一个布尔型数组,表示 origin_array中每个元素是否包含 elem + "." 这个子字符串。如果包含,则对应位置是 True,否则是 False

 


http://www.ppmy.cn/news/1551747.html

相关文章

从 HTML 到 CSS:开启网页样式之旅(五)—— CSS盒子模型

从 HTML 到 CSS:开启网页样式之旅(五)—— CSS盒子模型 前言一、盒子模型的组成margin(外边距):border(边框):padding(内边距):conten…

Rook入门:打造云原生Ceph存储的全面学习路径(下)

文章目录 六.Rook部署云原生CephFS文件系统6.1 部署cephfs storageclass6.2 创建容器所需cephfs文件系统6.3创建容器pod使用rook-cephfs提供pvc6.4 查看pod是否使用rook-cephfs 七.Ceph Dashboard界面7.1 启用dashboard开关7.2 ceph-dashboard配置外部访问7.3 Dashboard web ad…

美畅物联丨如何通过ffmpeg排查视频问题

在我们日常使用畅联AIoT开放云平台的过程中,摄像机视频无法播放是较为常见的故障。尤其是当碰到摄像机视频不能正常播放的状况时,哪怕重启摄像机,也仍然无法使其恢复正常的工作状态,这着实让人感到头疼。这个时候,可以…

Oracle 19c RAC单节点停机维护硬件

背景 RAC 环境下一台主机硬件光纤卡不定时重启,造成链路会间断几秒,期间数据库会话响应时间随之变长,该光纤卡在硬件厂商的建议下,决定停机更换备件,为保证生产影响最小,决定停掉该节点,另外节…

开源项目:纯Python构建的中后台管理系统

来源:Python大数据分析 费弗里 大家好我是费老师,目前市面上有很多开源的「中后台管理系统」解决方案,复杂如「若依」那种前端基于Vue,后端基于Java的框架,虽然其提供了较为完善的一整套前后端分离权限管理系统解决方…

【优选算法】模拟

目录 一、[替换所有的问号](https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/)二、[提莫攻击](https://leetcode.cn/problems/teemo-attacking/description/)三、[Z 字形变换](https://leetcode.cn/problems/zigzag-conver…

CentOS使用chrony服务进行时间同步源设置脚本

CentOS使用chrony服务进行时间同步源设置脚本 #!/bin/bash# Created: 2024-11-26 # Function: Check and Set OS time sync source to 10.0.11.100 # FileName: centos_set_time_source_to_ad.sh # Creator: Anster # Usage: # curl http://webserver-ip/scripts/centos_set…

yolov11剪枝

思路:yolov11中的C3k2与yolov8的c2f的不同,所以与之前yolov8剪枝有稍许不同; 后续:会将剪枝流程写全,以及增加蒸馏、注意力、改loss; 注意: 1.在代码105行修改pruning.get_threshold(yolo.mo…