python中获取数组(矩阵)值不为0的元素下标

本文详细介绍了如何使用Python的numpy库中的numpy.nonzero()函数来查找矩阵中非零元素的位置。无论是处理一维数组还是一般多维数组,此函数都能高效地返回所有非零元素的坐标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用python的numpy包进行矩阵运算时候,有时候需要获得矩阵中元素值不为0的下标,numpy包中的numpy.nonzero()函数可以实现这一功能。

定义 import numpy as npm=np.array(...),即m是numpy数组(矩阵),np.nonzero(m)返回m中值不为零的元素的下标,返回值是一个长度为m.ndim(m的轴数)的元组。元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。

一维数组

对于一维数组m1,np.nonzero(m1)所得到的是一个长度为1的元组,它表示m1[0]、m1[1]和m1[3]的值不为0。

>>> m1=np.array([3,6,0,9])
>>> np.nonzero(m1)
(array([0, 1, 3]),)
#形如(1,)的元组

多维数组(矩阵)

以二维数组为例,对于二维数组m2,np.nonzero(m2)所得到的是一个长度m2.ndim()输出为2的元组。它的第0个元素是数组m2中值不为0的元素的第0轴的下标,第1个元素则是第1轴的下标。

>>> m2=np.array([[1,2,0],[0,4,3],[0,0,0]])
>>> m2
array([[1, 2, 0],
       [0, 4, 3],
       [0, 0, 0]])
>>> np.nonzero(m2)
(array([0, 0, 1, 1]), array([0, 1, 1, 2]))#array([0, 0, 1, 1])是axis=0轴上的元素,同理是axis=1轴上的元素。

返回结果表示:矩阵m2中的(0, 0)、(0, 1)、(1, 1)、(1, 2)元素不为0。

### Python获取数组最大索引的方法 对于 `list` 类型的数据结构,在 Python 中可以通过组合使用内置函数来获得最大及其索引。具体来说,利用 `max()` 函数可以直接求得列表内的最大数;再配合 `index()` 方法,则能够定位该最大数所在的位置[^1]。 然而当处理多维数据时,尤其是采用 NumPy 库创建的数组对象 (`ndarray`) ,情况有所不同。由于 ndarray 并不支持直接调用 `index()` 来查询元素位置,因此推荐使用专门为此设计的功能——即 `np.argmax()` 函数。此功能不仅适用于一维向量,同样也适合更高维度的情况,并能指定轴参数以沿特定方向操作,从而返回最大所在的下标[^2]。 针对更复杂的情形,比如需要知道二维或多维矩阵中某个特殊的确切坐标(行列号),则可借助于 `np.where()` 或者结合 `np.unravel_index()` 使用 `np.argmax()` 的结果来进行转换,进而精确指出目标位置[^3]。 ```python import numpy as np # 创建一个简单的三维随机整数数组作为例子 arr = np.random.randint(0, 100, size=(4, 5)) print("原始数组:") print(arr) # 获取整个数组中的最大索引 (展平后的线性索引) linear_idx_max = np.argmax(arr) print(f"\n在整个数组中找到的最大的一维索引为 {linear_idx_max}") # 将线性索引映射回原形状下的多重索引形式 multi_idx_max = np.unravel_index(linear_idx_max, arr.shape) print(f"对应到实际位置则是第{multi_idx_max[0]+1}行第{multi_idx_max[1]+1}列") # 如果只需要某一行或某一列上的最大索引 row_wise_max_indices = np.argmax(arr, axis=1) # 行方向上寻找 col_wise_max_indices = np.argmax(arr, axis=0) # 列方向上寻找 print("\n各行最大在一维表示里的索引:", row_wise_max_indices) print("各列最大在一维表示里的索引:", col_wise_max_indices) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值