python array矩阵相关操作_python np.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} 列中\")
解释:
-
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 = 1value = 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 = 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
。
逐步分析:
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
。
五、获取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二维数组的最后增加一行
可以使用 numpy
的 vstack
或 append
函数来给二维数组增加一行。下面是两种常用方法的示例:
方法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
更直观一些。