首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不使用循环的情况下用列/行索引替换(0,1) numpy数组中的非零元素?

在不使用循环的情况下,可以使用numpy的函数来实现用列/行索引替换(0,1) numpy数组中的非零元素。具体步骤如下:

  1. 首先,使用numpy的函数nonzero()找到数组中非零元素的索引。该函数返回一个包含非零元素索引的元组,其中第一个元素是行索引数组,第二个元素是列索引数组。
  2. 接下来,使用numpy的函数np.zeros_like()创建一个与原数组形状相同的全零数组。
  3. 然后,使用numpy的函数np.put()将原数组中的非零元素替换为指定的行/列索引值。该函数接受三个参数,第一个参数是要替换的数组,第二个参数是非零元素的索引,第三个参数是要替换的值。

下面是一个示例代码:

代码语言:txt
复制
import numpy as np

# 创建一个示例数组
arr = np.array([[0, 1, 0],
                [1, 0, 1],
                [0, 0, 1]])

# 找到非零元素的索引
row_idx, col_idx = np.nonzero(arr)

# 创建一个全零数组
new_arr = np.zeros_like(arr)

# 将非零元素替换为行/列索引值
np.put(new_arr, np.ravel_multi_index((row_idx, col_idx), arr.shape), (row_idx, col_idx))

print(new_arr)

输出结果为:

代码语言:txt
复制
[[0 1 0]
 [1 0 2]
 [0 0 3]]

在这个例子中,原数组中的非零元素被替换为它们对应的行/列索引值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

70个NumPy练习:在Python下一举搞定机器学习矩阵运算

难度:1 问题:用-1替换arr数组中所有的奇数。 输入: 输出: 答案: 6.如何替换满足条件的元素而不影响原始数组?...难度:1 问题:使用科学记数法(如1e10)漂亮的打印数组rand_arr 输入: 输出: 答案: 23.如何限制numpy数组输出中打印元素的数量?...难度:1 问题:将python numpy数组a中打印的元素数量限制为最多6个。 输入: 输出: 答案: 24.如何在不截断的情况下打印完整的numpy数组?...难度:2 问题:找出数组iris_2d是否有缺失的值。 答案: 38.如何在numpy数组中使用0替换所有缺失值? 难度:2 问题:在numpy数组中用0替换nan。...答案: 方法2是首选,因为它创建了一个可用于采样二维表格数据的索引变量。 43.用另一个数组分组时,如何获得数组中第二大的元素值? 难度:2 问题:第二长的物种的最大价值是什么?

20.7K42
  • numpy基础知识

    二维 —- a表示数组中元素的行数,b表示数组中元素的列数三个值(a, b,c ) —– 三维 —- a表示数组中元素的块,b表示数组中每一块元素的行数,c表示数组中每一块元素的列数 计算 数组 和...其中:(0/0=nan ; 非零常数/0 = inf) 数组(a) 和 数组(b) 二维:(1)维数相同: 两个数组对应位置上的元素进行运算(2)行数相同(a(3,1),b(3,5)): b的每一列和a...delimiter:分割字符串skiprows:跳过的行(如:标题行) usecols:读取的数据的列 unpack:若为true,矩阵转置 numpy 转置: (1)transpose() 方法 (2...:t[行,列],取指定的行和列,其中:表示都要,如t[1,:]表示第二行的所有列例: import numpy as np t = np.arange(6).reshape((3,2)) print(t..., 大于value2的元素替换为value 常用函数 计算函数 求和 整个数组的和:np.sum(数组) 各个列对应的和:np.sum(数组,axis=0) 各个行对应的和:np.sum(数组,axis

    1.2K20

    挑战NumPy100关,全部搞定你就NumPy大师了 | 附答案

    ★☆☆) 如何使用命令行来获得numpy中add这个函数的文档?...创建一个3x3矩阵,其值范围为0到8 (★☆☆) 从[1,2,0,0,4,0]中查找出所有非零元素 (★☆☆) 创建一个 3 * 3单位矩阵 (★☆☆) 使用随机值创建一个 $333$ 数组(★☆...如何在一个既有数组周围添加边框(用0填充) (★☆☆) ? 17. 下方表达式的结果是什么?...如何让一个浮点类型数组里面的值全部取整? (★☆☆) 30. 如何在两个数组之间找到相同的值? (★☆☆) 31. 如何忽略所有的numpy警告(真正干活的时候不推荐这么干哈)??...创建一个结构化数组,其x和y坐标覆盖[0,1] x [0,1]区域 (★★☆) 47. 打印每个numpy标量类型的最小和最大可表示值 (★★☆) 48. 如何打印数组的所有值?

    4.9K30

    【学术】一篇关于机器学习中的稀疏矩阵的介绍

    矩阵的稀疏性可以用一个得分来量化,也就是矩阵中零值的个数除以矩阵中元素的总个数。...矩阵的每一行存储为一个列表,每个子列表包含列索引和值。 Coordinate List。一个元组的列表存储在每个元组中,其中包含行索引、列索引和值。...还有一些更适合执行高效操作的数据结构;下面列出了两个常用的示例。 压缩的稀疏行。稀疏矩阵用三个一维数组表示非零值、行的范围和列索引。 压缩的稀疏列。...与压缩的稀疏行方法相同,除了列索引外,在行索引之前被压缩和读取。 被压缩的稀疏行,也称为CSR,通常被用来表示机器学习中的稀疏矩阵,因为它支持的是有效的访问和矩阵乘法。...不过,我们可以很容易地计算出矩阵的密度,然后从一个矩阵中减去它。NumPy数组中的非零元素可以由count_nonzero()函数给出,数组中元素的总数可以由数组的大小属性给出。

    3.8K40

    针对SAS用户:Python数据分析库pandas

    可以认为Series是一个索引、一维数组、类似一列值。可以认为DataFrames是包含行和列的二维数组索引。好比Excel单元格按行和列位置寻址。...大部分SAS自动变量像_n_ 使用1作为索引开始位置。SAS迭代DO loop 0 to 9结合ARRAY产生一个数组下标超出范围错误。 下面的SAS例子,DO循环用于迭代数组元素来定位目标元素。...SAS中数组主要用于迭代处理如变量。SAS/IML更接近的模拟NumPy数组。但SAS/IML 在这些示例的范围之外。 ? 一个Series可以有一个索引标签列表。 ?...Series由整数值索引,并且起始位置是0。 ? SAS示例使用一个DO循环做为索引下标插入数组。 ? 返回Series中的前3个元素。 ? 该示例有2个操作。...显然,这会丢弃大量的“好”数据。thresh参数允许您指定要为行或列保留的最小非空值。在这种情况下,行"d"被删除,因为它只包含3个非空值。 ? ? 可以插入或替换缺失值,而不是删除行和列。.

    12.1K20

    盘一盘 Python 特别篇 20 - SciPy 稀疏矩阵

    有兴趣的读者可以去官网去查询。 COO 采用三元组 (row, col, data) 的形式来存储矩阵中非零元素的信息,即把非零值 data 按着行坐标 row 和纵坐标 col 写成两个列表。...,同样由三个一维数组 indptr, indices, data 组成, indices 存储每列中数据的行号,与属性 data 中的元素一一对应 indptr 存储每列数据元素的起始位置 如下图所示:...列:indptr 1-4 指 indices[1:4] 的值即 0,1 和 4,分别又指第 0,1 和 4 行,对应的数据 2,5 和 7 第 3 列:indptr 4-6 指 indices[4:6...: data 保存每行中的非零元素的值 rows 保存每行非零元素所在的列号 (列号是按顺序排的)。...'>' with 13 stored elements in List of Lists format> 检查矩阵 A 的每行的非零值对应的列索引。

    2.1K30

    NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具

    上述代码中的matrix[0,1],其中0代表的是行,在NumPy中0代表起始第一个,所以取的是第一行,之后的1代表的是列,所以取的是第二列。那么最后第一行第二列就是2这个值了。...print(matrix[:,0:2])代表的是选取所有的行,列的索引是0和1。 print(matrix[1:3,:])代表的是选取行的索引值1和2以及所有的列。...print(matrix[1:3,0:2])代表的是选取行的索引1和2以及列的索引是0和1的所有数据。 07 数组比较 NumPy强大的地方是数组或矩阵的比较,数据比较之后会产生boolean值。...10 NumPy的统计计算方法 NumPy内置很多计算方法。其中最重要的统计方法有: sum():计算数组元素的和;对于矩阵计算结果为一个一维数组,需要指定行或者列。...mean():计算数组元素的平均值;对于矩阵计算结果为一个一维数组,需要指定行或者列。 max():计算数组元素的最大值;对于矩阵计算结果为一个一维数组,需要指定行或者列。

    1.4K30

    Python 数据分析(PYDA)第三版(二)

    注意 不能假设numpy.empty会返回一个全为零的数组。该函数返回未初始化的内存,因此可能包含非零的“垃圾”值。只有在打算用数据填充新数组时才应使用此函数。...NumPy 数组的算术运算 数组很重要,因为它们使您能够在不编写任何for循环的情况下对数据执行批量操作。NumPy 用户称之为向量化。...用数组表达式替换显式循环的这种做法被一些人称为向量化。一般来说,向量化的数组操作通常比它们纯 Python 等效的要快得多,在任何类型的数值计算中影响最大。...在数据分析中,where的典型用法是根据另一个数组生成一个新的值数组。假设你有一个随机生成数据的矩阵,并且你想用 2 替换所有正值和用-2 替换所有负值。...表 4.8:常用的numpy.linalg函数 函数 描述 diag 返回方阵的对角线(或非对角线)元素作为 1D 数组,或将 1D 数组转换为具有非对角线零的方阵 dot 矩阵乘法 trace 计算对角线元素的和

    29300

    python数据分析——数据的选择和运算

    Python中的NumPy库提供了高效的多维数组对象及其上的运算功能,使得大规模的数值计算变得简单快捷。通过NumPy,我们可以进行向量化运算,避免了Python原生循环的低效性。...一、数据选择 1.NumPy的数据选择 NumPy数组索引所包含的内容非常丰富,有很多种方式选中数据中的子集或者某个元素。...主要有以下四种方式: 索引方式 使用场景 基础索引 获取单个元素 切片 获取子数组 布尔索引 根据比较操作,获取数组元素 数组索引 传递索引数组,更加快速,灵活的获取子数据集 数组的索引主要用来获得数组中的数据...关于NumPy数组的索引和切片操作的总结,如下表: 【例】利用Python的Numpy创建一维数组,并通过索引提取单个或多个元素。...[0,1] 【例3】请使用Python对如下的二维数组进行提取,选择第一行的数据元素并输出。

    19310

    python的numpy入门简介

    ] [True False False]]  arr[arr == 2]  即返回[2 2]  还可以逻辑运算如 arr[-(arr == 2) |(arr == 2)] 数组索引(花式索引): arr...对于非复数值,可以使用更快的fabs。 sqrt 计算各元素的平方根。相当于arr ** 0.5 sqare 计算各元素的平方。...NumPy的ndarray 快速的元素级数组函数 • 二元函数 I 类型 说明 add 将数组中对应的元素相加 subtract 从第一个数组中减去第二个数组中的元素 multiply 数组元素相乘 divide...logical_and, logical_or, logical_xor 执行元素级的真值逻辑运算,最终产生布尔型数组。 用数组表达式代替循环的做法,通常被称为矢量化。...以一维数组的形式返回方阵的对角线(或非对角线元素),获将一维数组转换 为方阵(非对角线元素为0)。

    1.4K30

    科学计算库—numpy随笔【五一创作】

    1.虽然Python数组结构中的列表list实际上就是数组,但是列表list保存的是对象的指针,list中的元素在系统内存中是分散存储的,例如[0,1,2]需要3个指针和3个整数对象,浪费内存和计算时间...补充: ”1矩阵“ np.ones((row,col)) 8.1.4、numpy 哪个是行、列? 最后两组数为行和列。...3)叉乘(np.cross)、外乘(np.outer) 细说NumPy数组的四种乘法的使用 8.1.7、numpy 索引和切片操作 举个例子: 补充: 花式索引 通过整型数组进行索引 花式索引为什么有两层中括号...以数组对象 arr 为例,向arr[]中传入数组作为参数,所以才有了两个中括号 在机器学习中常通过使用花式索引来打乱数据集的样本顺序,避免机器学习模型学习到样本的位置噪声,对于监督学习的数据集如果打乱了样本还需要打乱相对应的标签值...,样本与标签都是一一对应的关系,使用花式索引能够轻松的解决。

    74640

    Numpy库

    -1]) #9 #2.多维数组 #也是通过中括号来索引和切片.在中括号中,使用逗号进行分割,逗号前面的是行, #逗号后面的是列,如果多维数组中只有一个值,那么这个值就是行 a2=np.random.randint...如果是多维数组(这里以二维为例),那么行的部分和列的部分,都是遵循一维度数组的方式,可以使用整形,切片,还可以使用中括号的形式来代表不连续的。...提取条件可以有多个,那么如果有多个,可以使用&来代替且,用|来代替或,如果有多个条件,那么每个条件要使用圆括号括起来。 # 值的替换 利用索引,也可以做一些值的替换。...]=1 #把元素小于3的全部替换为1 print(a3) a3=np.where(a3的 全部替换为1 其余为0 print(a3) 总结: ​ 可以使用索引或者切片来替换...使用条件索引来替换。 ​ 使用where函数来实现。 # 数组广播机制 # 数组与数的计算 在Python列表中,想要对列表中所有的元素都加一个数,要么采用map函数,要么循环整个列表进行操作。

    3.7K20

    【动手学深度学习笔记】之实现softmax回归模型

    ,out=None) → Tensor#gather的作用是这样的,index实际上是索引,具体是行(dim=1)还是列(dim=0)的索引要看前面dim 的指定,输出的大小由index决定 这个函数的原理我归结如下...假设输入与上同;index=B;输出为CB中每个元素分别为b(0,0)=0,b(0,1)=0 b(1,0)=1,b(1,1)=0 如果dim=0(列)则取B中元素的列号,如:b(0,1...)的1b(0,1)=0,所以C中的c(0,1)=输入的(0,1)处元素2 如果dim=1(行)则取B中元素的列号,如:b(0,1)的0b(0,1)=0,所以C中的c(0,1)=输入的(0,0)处元素1...根据得到的索引在输入中取值#[1,2],[3,2] 因为softmax回归模型得到的结果可能是多个标签对应的概率,为了得到与真实标签之间的损失值,我们需要使用gather函数提取出在结果中提取出真实标签对应的概率...[0] #通过shape[0]获取y的零维度(列)的元素数量 return right_sum/n 1.7优化算法 softmax回归应用的优化算法同样使用小批量随机梯度下降算法。

    84620

    Python 数据处理:NumPy库

    比起Python的内置序列,NumPy数组使用的内存更少。 NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。...print(arr2d[0,2]) 二维数组的索引方式,轴0作为行,轴1作为列: 在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据...对于非复数值,可以使用更快的fabs sqrt 计算各元素的平方根。相当于arr** 0.5 square 计算各元素的平方。...默认情况下,NumPy数组是按行优先顺序创建的。在空间方面,这就意味着,对于一个二维数组,每行中的数据项是被存放在相邻内存位置上的。...用广播的方式对行进行距平化处理会稍微麻烦一些。幸运的是,只要遵循一定的规则,低维度的值是可以被广播到数组的任意维度的(比如对二维数组各列减去行平均值)。

    5.7K11

    NumPy 1.26 中文官方指南(三)

    在 NumPy 中的数组赋值通常存储为 n 维数组,只需要最小类型来存储对象,除非你指定维数和类型。NumPy 执行元素按元素的操作,所以用*来乘以 2D 数组不是矩阵乘法 - 这是元素按元素的乘法。...1xn 或 nx1)或 1D NumPy 数组 a(长度 n)中的最后一个元素 a(2,5) a[1, 4] 访问二维数组 a 中第二行第五列的元素 a(2,:) a[1] 或 a[1, :] 二维数组...索引:MATLAB 使用基于一的索引,因此序列的初始元素索引为 1。Python 使用基于零的索引,因此序列的初始元素索引为 0。关于这一点可能会产生混淆和激烈争论,因为每种方式都有其优势和劣势。...MATLAB 和 NumPy 的 & 和 | 操作符之间的显著区别包括: 非逻辑 {0,1} 输入:NumPy 的输出是输入的按位与。MATLAB 将任何非零值视为 1,并返回逻辑与。...然而,用户仍然希望使用熟悉的 NumPy API 和最小(理想情况下为零)的移植开销重新使用现有代码来处理这些数组。

    38310

    SciPy 稀疏矩阵(5):CSR

    因此,获取 LIL 格式的稀疏矩阵中的某一行(第 i 行)的非零元素的列索引和元素值只需要分别访问 rows 属性(数组)第 i 个元素(动态数组)和 data 属性(数组)的第 i 个元素(动态数组)...如图所示,我们可以发现 LIL 格式的稀疏矩阵虽然可以快速获取某一行的信息,但是它任意相邻两行的非零元素的列索引以及对应元素值并不是存储在一段连续的内存空间中,换句话说就是当缓存中的第 i 行非零元素的信息即将用完的时候...,shape 是矩阵的行列数(M 行 N 列),默认会通过非零元素行索引外加上非零元素列索引进行推断。...csr_matrix((data, indices, indptr), [shape=(M, N)]):第 i 行非零元素的列索引是 indices[indptr[i]:indptr[i+1]],对应的非零元素值存储在...part 06、下回预告 BETTER LIFE 不同于 LIL 格式的稀疏矩阵把相邻两行的非零元素的列索引和元素值存储在内存的不同位置,CSR 格式的稀疏矩阵中相邻两行的非零元素的列索引和元素值在内存中是紧密相连的

    16510

    一起来学演化计算-matlab基本函数find

    找到非零元素的索引和值 语法 k = find(X) k = find(X)返回一个向量,其中包含数组X中每个非零元素的 线性索引 。...如果X是一个向量,那么find返回一个与X方向相同的向量 如果X是一个多维数组,那么find返回结果的线性索引的列向量 如果X不包含非零元素或为空,则find返回一个空数组 k = find(X,n)...X中的最后n个非零元素 [row,col] = find( ___ ) 使用前面语法中的任何输入参数返回数组X中每个非零元素的行和列下标 [row,col,v] = find( ___ ) 返回向量v,...其中包含X的非零元素 find:找出向量或矩阵中非零元素的位置标识 在许多情况下,都需要对矩阵中符合某一特定条件的元素的位置进行定位,如将某一矩阵中为零的元素设为1等。...[i,j]=find(A) 此函数返回矩阵A的非零元素的行和列的表示,其中i代表行标而j代表列标。此函数经常用在稀疏矩阵中。在多维矩阵中通常将第一维用i表示,将其余各维作为第二维,用j表示。 ?

    1.6K70

    numpy模块(对矩阵的处理,ndarray对象)

    ,j为矩阵的列""" return i*j # 使用函数对矩阵元素的行和列的索引做处理,得到当前元素的值,索引从0开始,并构造一个3*4的矩阵 print(np.fromfunction(func...(a[, size]) 从arr中随机选择指定数据 arr为1维数组;size为数据形状 4.矩阵运算(与数据类型差不多) 运算表 运算符 说明 + 两个矩阵对应元素相加 - 两个矩阵对应元素相减 *...两个矩阵对应元素相乘 / 两个矩阵对应元素相除,如果都是整数则取商 % 两个矩阵对应元素相除后取余数 **n 单个矩阵每个元素都取n次方,如**2:每个元素都取平方 4.矩阵的行和列互换(transpose...(axis=0)每列 (axis=1)每行 # 获取矩阵所有元素中的最大值 print(arr.max()) # 获取举着每一列的最大值 print(arr.max(axis=0)) # 获取矩阵每一行的最大值...print(arr.var()) # 获取矩阵每一列的元素的方差 print(arr.var(axis=0)) # 获取矩阵每一行的元素的方差 print(arr.var(axis=1

    95020

    Python:numpy模块最详细的教程

    获取numpy数组的列 print(arr.shape[1]) 3 六、切割numpy数组 切分numpy数组类似于列表的切割,但是与列表的切割不同的是,numpy数组的切割涉及到行和列的切割,但是两者切割的方式都是从索引...、numpy数组元素替换 numpy数组元素的替换,类似于列表元素的替换,并且numpy数组也是一个可变类型的数据,即如果对numpy数组进行替换操作,会修改原numpy数组的元素,所以下面我们用.copy...()方法举例numpy数组元素的替换。...合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的 print(np.hstack((arr1,...def func(i, j): """其中i为numpy数组的行,j为numpy数组的列""" return i * j # 使用函数对numpy数组元素的行和列的索引做处理,得到当前元素的值

    1.2K20
    领券