> 技术文档 > python array矩阵相关操作_python np.array

python array矩阵相关操作_python np.array


目录:

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

二、根据某列中的特定值筛选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} 列中\")

解释:

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

    • : 表示选择所有行。
    • column_index 是你想查找的列的索引(从0开始)。
  2. 使用 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 = 1value = 5# 筛选出第二列等于5的所有行filtered_array = array[array[:, column_index] == value]print(filtered_array)

解释:

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

输出: 

[[4 5 6]]

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

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

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

# 示例 2D 列表array = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [4, 10, 11]]# 筛选条件:根据第二列的值筛选column_index = 1value = 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 = 5result = 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 = 5position = 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 = 5position = Nonefor i in range(len(matrix)): for j in range(len(matrix[i])): if matrix[i][j] == element: position = (i, j) break if 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 + \".\") != 0print(judge_array)

输出:

[ 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

五、获取array二维数组的行数和列数 

想获取一个 NumPy 二维数组的行数或者列数,可以使用 shape 属性shape 属性返回一个元组,第一个元素是行数,第二个元素是列数。可以通过索引访问行数或者列数。

import numpy as np# 创建一个二维数组arr = np.array([[1,2,3], [4,5,6], [7,8,9]])# 获取行数num_rows = arr.shape[0]# 获取列数num_columns = arr.shape[1]# 获取行数,列数(num_rows, num_columns) = arr.shapeprint(f\"行数: {num_rows}\")print(f\"列数: {num_columns}\")

 输出:

行数: 3列数: 3
  • 如果你对行数和列数都感兴趣,可以直接使用 arr.shape,它会返回一个 (rows, columns) 的元组。例如,arr.shape 返回 (3, 3),表示 3 行 3 列。

六、在array二维数组的最后增加一行 

可以使用 numpyvstackappend 函数来给二维数组增加一行。下面是两种常用方法的示例:

方法1:使用 numpy.vstack 

numpy.vstack 用于将多个数组按垂直方向(行)堆叠。你可以用它来在原数组的最后增加一行。

import numpy as np# 原始二维数组array = np.array([[1, 2], [3, 4]])# 新增的行new_row = np.array([5, 6])# 使用 vstack 增加一行array = np.vstack([array, new_row])print(array)

输出: 

[[1 2] [3 4] [5 6]]

方法2:使用 numpy.append

numpy.append 也可以用来增加一行,但是它需要指定 axis=0,表示按行增加。

import numpy as np# 原始二维数组array = np.array([[1, 2], [3, 4]])# 新增的行new_row = np.array([5, 6])# 使用 append 增加一行array = np.append(array, [new_row], axis=0)print(array)

 输出: 

[[1 2] [3 4] [5 6]]

总结

  • 如果你需要增加一行,可以选择 vstack 或 append,两者都能达到相同效果。vstack 更直观一些。