在Python中重新编号一维网格

1 投票
2 回答
787 浏览
提问于 2025-04-18 16:28

首先,我在其他问题中找不到答案。

我有一个整数的numpy数组,叫做ELEM,这个数组有三列,分别表示元素编号、节点1和节点2。这是一个一维的网格。我需要做的是重新编号这些节点,我手里有旧的和新的节点编号表,所以算法应该根据这些表来替换ELEM数组中的每个值。

代码应该像这样

old_num = np.array([2, 1, 3, 6, 5, 9, 8, 4, 7])
new_num = np.arange(1,10)
ELEM = np.array([ [1, 1, 3], [2, 3, 6], [3, 1, 3], [4, 5, 6]])

从现在开始,对于ELEM数组中第二列和第三列的每个元素,我应该根据new_num表中对应的整数来替换每个整数。

2 个回答

1

我其实不太明白你的问题是什么,但我尽量帮你理解一下…

我觉得你是想把,比如说2换成1,或者7换成10,对吧?如果是这样的话,你可以创建一个字典,用来存放需要替换的数字。下面的'dict'就是为了这个目的。虽然也可以用元组或列表来实现,但在这种情况下,使用字典会更好。之后,只需要通过查字典来替换每个元素就可以了。

下面的代码非常基础,相对容易理解。当然,还有更“pythonic”的方法来实现这个功能。但如果你是Python新手,下面的代码会是最合适的选择。

import numpy as np

# Data you provided
old_num = np.array([2, 1, 3, 6, 5, 9, 8, 4, 7])
new_num = np.arange(1,10)
ELEM = np.array([ [1, 1, 3], [2, 3, 6], [3, 1, 3], [4, 5, 6]])

# Create a dict for the elements to be replaced
dict = {}
for i_num in range(len(old_num)):
    num = old_num[i_num]
    dict[num] = new_num[i_num]

# Replace the elements
for element in ELEM:
    element[1] = dict[element[1]]
    element[2] = dict[element[2]]

print ELEM
1

如果你需要做很多这样的事情,把重新编号的规则放在一个字典里会更方便,这样查找起来会更快。

lookup_table = dict( zip( old_num, new_num ) ) # create your translation dict
vect_lookup = np.vectorize( lookup_table.get ) # create a function to do the translation
ELEM[:, 1:] = vect_lookup( ELEM[:, 1:] ) # Reassign the elements you want to change

np.vectorize 只是为了让代码看起来更好。它的作用就是让我们可以用 lookup_table.get 函数来处理数组中的值。

撰写回答