gpt4 book ai didi

python - 提取给定数组中的公共(public)元素以生成新数组

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

在下面的示例中,data1、data2 和 data3 是给定的数组。现在,我必须找出所有给定数组中存在的元素。然后,我必须创建仅包含那些公共(public)元素的新数组,并将所有其他元素分配为 nan 值。

将 numpy 导入为 np

data1 = np.array ([[1,2,33,4,33,6],[7,8,9,10,93,12]])
data2 = np.array ([[1,14,33,15,33,17],[18,19,20,21,93,23]])
data3 = np.array ([[24,25,33,26,1,28],[93,30,31,32,93,34]])

所需的结果如下所示作为结果数组:只有值 33 和 93 可用于所有给定数组的相同位置(即,它们应该重叠)。换句话说,我必须从这里的每个数组中找出具有相同值的重叠元素。

result = np.array([[nan,nan,33,nan,nan,nan],[nan,nan,nan,nan,93,nan]])

我期待一种有效的计算方法。任何想法将不胜感激。

最佳答案

使用 bool 索引

import numpy as np
result = np.empty_like(data1, dtype=float)
# Make an array of True-False values storing which indices are the same
indices = (data1==data2) * (data2==data3)
result[indices] = data1[indices]
result[~indices] = np.nan

如果你有更多的数组,你可以这样做:(假设数组在列表中)

# construct the list of arrays
data = []
for i in xrange(8):
data.append(np.random.randint(0,2, (20, 20)))
indices = data[0] == data[1]
for i in xrange(2, 8):
indices *= (data[0] == data[i])
result = np.empty_like(data[1], dtype=float)
result[indices] = data1[indices]
result[~indices] = np.nan
result

但是,如果每个数组只是 3D 数组的一部分,那就更好了。在另一个答案中显示,给定多个数组,您可以从中创建一个 3D 数组,然后使用 np.where。这是一种有效的方法。我将在这里展示如何使用阵列广播来做到这一点。在这种情况下,我们可以执行以下操作

# construct 3D array with random data
# each data array will be a slice of this array, e.g. data[0], data[1], etc.
data = np.random.randint(0, 3, (3, 4, 5))
# make an empty array to store the results as before
result = np.empty_like(data[0], dtype=float)
# use broadcasting to test for equality
indices = np.all(data == data[0], axis=0)
# Do the assignment as before
result[indices] = data[0][indices]
result[~indices] = np.nan
result

关于python - 提取给定数组中的公共(public)元素以生成新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642748/

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