You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于坐标数组替换矩阵指定位置的值?

解决Numpy矩阵指定坐标赋值的问题

嘿,我明白你遇到的问题了——用matrix[coords]=1的时候不小心把整个矩阵都变成1了,这是因为Numpy的索引规则和你想的不太一样。

为什么原来的写法会出错?

当你用matrix[coords]这种方式索引时,Numpy会把coords这个二维数组拆解成行索引数组和列索引数组(也就是coords[:,0]和coords[:,1]),然后通过广播机制生成一个3x3的索引矩阵,最终给所有位置都赋了值,这就是为什么你得到全1矩阵的原因。

正确的赋值方法

有两种简单的方式可以实现你想要的效果:

方法1:拆分坐标为行和列的一维数组

把coords转置后拆分,分别作为行和列的索引:

import numpy as np

matrix = np.zeros((3,3), dtype=int)
coords = np.array([[0,0],[2,1],[0,2]])

# 拆分坐标
rows, cols = coords.T
matrix[rows, cols] = 1

print(matrix)

输出结果:

array([[1, 0, 1],
       [0, 0, 0],
       [0, 1, 0]])

方法2:将坐标数组转为元组

Numpy接受元组形式的索引,把转置后的coords转为元组,直接作为索引:

import numpy as np

matrix = np.zeros((3,3), dtype=int)
coords = np.array([[0,0],[2,1],[0,2]])

matrix[tuple(coords.T)] = 1

print(matrix)

同样会得到你期望的输出。

原理说明

这两种方法本质上都是告诉Numpy:用coords里的第一个元素作为行索引,第二个作为列索引,逐个定位到矩阵的单个元素,而不是触发广播生成整个矩阵的索引。这样就能精准地给指定位置赋值为1啦!

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:53:12