gpt4 book ai didi

python - 在一个数组中搜索特定元素并将整个对应行复制到另一个数组中

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:27 24 4
gpt4 key购买 nike

我有以下问题,到目前为止我还没有在任何地方找到任何有用的提示。

我有两个数组,如下所示:

sample_nodes = [[ ID_1    x1    y1    z1]
[ ID_2 x2 y2 z2]
[ ID_3 x3 y3 z4]
.
.
.
[ ID_n xn yn zn]]

sample_elements = [[[ ID_7    0    0    0]
[ ID_21 0 0 0]
[ ID_991 0 0 0]
[ ID_34 0 0 0]]

[[ ID_67 0 0 0]
[ ID_1 0 0 0]
[ ID_42 0 0 0]
[ ID_15 0 0 0]]

.
.
.

[[ ID_33 0 0 0]
[ ID_42 0 0 0]
[ ID_82 0 0 0]
[ ID_400 0 0 0]]]

sample_nodes 具有 x、y 和 z 坐标,这些坐标是 sample_elements 所需的,其中 ID 以随机顺序排列。因此,我必须查看 sample_elements 数组中每一行的每个 ID,并从 sample_nodes 中找出相应的 x、y 和 z 坐标,并再次将零值替换回与 ID 对应的 sample_elements 数组中。

我对 python 和 numpy 都很陌生,因此不知道如何去做。提前感谢大家提供解决此问题的任何指示。

此外,sample_elements 中的所有 ID 都存在于 sample_nodes 中。只有在 sample_elements 中它们是随机排列的,因为它们是由名为 Gmsh 的网格划分软件生成的。我实际上是在尝试解析它的输出网格文件。

最佳答案

您可以使用 np.searchsorted形成原始行顺序,然后用它简单地索引到 sample_nodes 将为我们提供所需的输出。因此,我们会有这样的实现 -

sample_nodes[np.searchsorted(sample_nodes[:,0],sample_elements[:,0])]

sample 运行-

In [80]: sample_nodes
Out[80]:
array([[1, 3, 3, 6],
[3, 2, 4, 8],
[4, 2, 3, 4],
[5, 3, 0, 8],
[6, 8, 2, 3],
[7, 4, 6, 3],
[8, 3, 8, 4]])

In [81]: sample_elements
Out[81]:
array([[7, 0, 0, 0],
[5, 0, 0, 0],
[3, 0, 0, 0],
[6, 0, 0, 0]])

In [82]: sample_nodes[np.searchsorted(sample_nodes[:,0],sample_elements[:,0])]
Out[82]:
array([[7, 4, 6, 3],
[5, 3, 0, 8],
[3, 2, 4, 8],
[6, 8, 2, 3]])

如果 sample_nodes 中的 ID 没有排序,我们需要使用可选参数 sorternp.searchsorted ,就像这样 -

sidx = sample_nodes[:,0].argsort()
row_idx = np.searchsorted(sample_nodes[:,0],sample_elements[:,0],sorter=sidx)
out = sample_nodes[sidx[row_idx]]

sample 运行-

In [98]: sample_nodes
Out[98]:
array([[3, 3, 3, 6],
[5, 2, 4, 8],
[8, 2, 3, 4],
[1, 3, 0, 8],
[4, 8, 2, 3],
[7, 4, 6, 3],
[6, 3, 8, 4]])

In [99]: sample_elements
Out[99]:
array([[7, 0, 0, 0],
[5, 0, 0, 0],
[3, 0, 0, 0],
[6, 0, 0, 0]])

In [100]: out
Out[100]:
array([[7, 4, 6, 3],
[5, 2, 4, 8],
[3, 3, 3, 6],
[6, 3, 8, 4]])

关于python - 在一个数组中搜索特定元素并将整个对应行复制到另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554861/

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