python array矩阵相关操作
目录:
一、判断某个值是否在array二维数组的某列中
二、根据某列中的特定值筛选array数组
三、查找一个元素在二维 array
矩阵中的位置
四、判断array数组中的每个元素是否包含特定的子字符串
一、判断某个值是否在array二维数组的某列中
在 Python 中,如果你使用的是 numpy
数组,可以使用 numpy
提供的方法来判断某个值是否在数组的某一列中。这里有一个例子:
1、使用切片操作提取列(前提是 numpy
数组 array
)
假设你有一个 numpy
数组 array
,并且你想判断某个值是否在该数组的某一列中。
示例代码:
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} 列中")
解释:
-
array[:, column_index]
是切片操作,用于提取指定列的所有元素。:
表示选择所有行。column_index
是你想查找的列的索引(从0开始)。
-
使用
in
关键字判断该值是否存在于该列中。
输出:
5 在第 2 列中
如果你没有使用 numpy
而是使用原生的 Python 列表,代码会稍有不同。
2、 使用 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} 列中")
输出:
5 在第 2 列中
这种方法适用于 Python 原生的二维列表结构。
二、根据某列中的特定值筛选数组
1、是numpy的array数组
在 Python 中,如果你使用的是 numpy
数组,可以利用布尔索引来根据某列的值筛选数组。
示例代码:
假设你有一个 numpy
数组 array
,并且你想根据某列的值筛选数组中的行。
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)
解释:
array[:, column_index]
提取数组的指定列(通过索引选择)。array[:, column_index] == value
会生成一个布尔数组,表示该列中哪些值等于value
。- 使用该布尔数组来索引原数组,返回符合条件的所有行。
输出:
[[4 5 6]]
在这个例子中,输出为所有第二列值为 5
的行。
2、是python原生列表构成的二维数组
如果你没有使用 numpy
,而是使用原生的 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)
输出:
[[4, 5, 6]]
这种方法适用于原生 Python 列表结构。
三、查找一个元素在二维 array
矩阵中的位置
假设你有一个二维矩阵 matrix
,你要查找某个元素的位置。
方法 1: 使用 numpy
库
numpy
是一个高效的数值计算库,可以方便地进行数组操作。
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)
会返回一个元组,表示符合条件的元素的行和列索引。
输出:
元素的位置是: (array([1]), array([1]))
在这个例子中,5
出现在矩阵的第 2 行(索引 1)第 2 列(索引 1)。
方法 2: 使用列表推导式
如果你不想使用 numpy
库,可以使用纯 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)
输出:
元素的位置是: (1, 1)
在这个例子中,5
位于矩阵的第 2 行(索引 1),第 2 列(索引 1)。
方法 3: 使用 for
循环
你也可以使用嵌套 for
循环来遍历矩阵,找到元素的位置。
# 创建一个二维数组
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)
输出:
元素的位置是: (1, 1)
总结
- 如果你使用
numpy
库,np.where()
是一种非常简洁高效的方式。 - 如果不使用外部库,可以通过嵌套
for
循环或者列表推导式来查找元素的位置。
四、判断array数组中的每个元素是否包含特定的子字符串
示例:
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)
输出:
[ True False True False]
解释:
- 第一个元素
"abc."
包含了"abc."
,所以为True
。 - 第二个元素
"def."
不包含"abc."
,所以为False
。 - 第三个元素
"abc.abc."
包含了"abc."
,所以为True
。 - 第四个元素
"ghi"
不包含"abc."
,所以为False
。
逐步分析:
origin_array
: 假设它是一个 NumPy 数组,里面的每个元素可能是字符串类型(例如,形如["abc.", "def.", "ghi."]
)。elem
: 假设这是一个字符串变量,它可能是任意的,如"abc"
或"def"
。elem + "."
: 这表示将字符串elem
和字符"."
拼接起来,生成一个新的字符串。例如,如果elem = "abc"
,那么elem + "."
就是"abc."
。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."
在第一 个元素中出现一 次,在第二个元素中出现两次,而在第三个元素中没有出现。
- 例如,如果
np.char.count(origin_array, elem + ".") != 0
: 这一部分检查每个元素的出现次数是否不等于零。即,如果某个元素中包含了elem + "."
(即abc.
或其他),它将返回True
,否则返回False
。
最终效果:
judge_array
是一个布尔型数组,表示 origin_array
中每个元素是否包含 elem + "."
这个子字符串。如果包含,则对应位置是 True
,否则是 False
。