gpt4 book ai didi

python - 如何更改 Numpy 中的二维数组元素?

转载 作者:行者123 更新时间:2023-12-01 00:29:39 28 4
gpt4 key购买 nike

我试图迭代源数组以更改目标数组中的一些元素,但我无法获得正确的索引,我有无法理解的偏移量。一般来说,我的任务是在条件需要时更改元素

import numpy as np

x = np.linspace(0,1000, 1000/50)
y = np.linspace(0,1000, 1000/50)
X,Y = np.meshgrid(x,y)

source = np.column_stack([X.ravel(), Y.ravel()]).astype(int)
destination = source.copy()

for x, i in np.ndenumerate(source):
# if smth:
destination[i] = np.array([x[0] + 10, x[1]])

我认为我不应该使用源数组,而只迭代目标数组(不能使用标准方法完成),请告诉我正确的解决方案,提前感谢。

Current output:
[421 789]
[473 789]
[526 789]
[578 789]
[631 789]
[684 789]


Required output:
[431 789]
[483 789]
[536 789]
[588 789]
[641 789]
[694 789]

我会更简单地解释一下,我有一个网格,它有点,我需要将点移动,例如向右移动 88、89、90、10 个像素,为此我需要有一个源数组和目的地(这些点偏移的地方),枚举很可能不适合我,但是通常对数组进行编辑,例如 for x in destination: 当编辑 x 时给出所需的结果,但这不适用于 ndarray

enter image description here

for x, i in enumerate(destination):
inside = cv2.pointPolygonTest(cnt, (destination[x,0],
destination[x,1]), False)
if inside > 0:
cv2.circle(img, (destination[x,0], destination[x,1]), 10,
(255,0,0), 2)
destination[x] = np.array([destination[x,0] + 10, destination[x,1]])

# Contour(cnt)
[[550 42]
[600 42]
[690 273]
[640 273]]

如您所知,我需要将蓝色圆圈中的所有内容移动 10 像素

最佳答案

解决方案

从数据创建到目标区域修改,我们可以将其分为三个步骤。可以使用 numpy 索引以及通过 numpy.where 和 numpy.logic_and (如果需要)进行条件区域选择来实现修改。

1。制作数据

import numpy as np

x = np.linspace(0,1000, int(1000/50))
y = np.linspace(0,1000, int(1000/50))
X,Y = np.meshgrid(x,y)

source = np.column_stack([X.ravel(), Y.ravel()]).astype(int)
destination = source.copy()

2。使用条件语句查找目标区域

target_index = np.where(np.logical_and(destination[:,1]==789, destination[:,0]>=421))
destination[target_index]

输出:

array([[ 421,  789],
[ 473, 789],
[ 526, 789],
[ 578, 789],
[ 631, 789],
[ 684, 789],
[ 736, 789],
[ 789, 789],
[ 842, 789],
[ 894, 789],
[ 947, 789],
[1000, 789]])

3. Make changes to the target region

scope = destination[target_index] 
scope[:,0] = scope[:,0] + 10
destination[target_index] = scope
destination[target_index]

输出:

array([[ 431,  789],
[ 483, 789],
[ 536, 789],
[ 588, 789],
[ 641, 789],
[ 694, 789],
[ 746, 789],
[ 799, 789],
[ 852, 789],
[ 904, 789],
[ 957, 789],
[1010, 789]])

关于python - 如何更改 Numpy 中的二维数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com