假设我们有x,y,z数组:
x = np.array([10, 11])
y = np.array([10, 10])
z = np.array([[ 10, 229, 261, 11, 243],
[ 10, 230, 296, 10, 79],
[ 10, 10, 10, 10, 10],
[ 0, 260, 407, 229, 79],
[ 10, 10, 11, 106, 11]])
我需要一个函数,取x或y数组并在z:中搜索它
myfunc(x, z) # should give following result:
([1, 2, 4], [1, 2, 1])
上面的第一个列表是z中找到x的行的索引,第二个列表是每行中x出现的时间。
myfunc(y, z) # should give following result:
([0, 4], [1, 2])
我确实搜索了类似的问题,并试图实现这些问题。但不知道如何计算1d数组在2d中的出现次数。
好的,假设你不关心变量在x或y中的顺序,你可以使用Counter来找到出现的次数,并使用它们来找到x和y变量的最小出现次数。让它有点混乱的是,你可以在搜索的值中有重复的值,所以再次使用Counter让它更容易。然而,你不能在2D阵列上使用计数器,所以你需要迭代你的z
from collections import Counter
def myfunct(x, z):
occurences_result = []
rows_result = []
for row, i in enumerate(z):
count = Counter(i)
count_x = Counter(x)
occurences = [int(count[x_value]/x_occ) for x_value, x_occ in count_x.items() if x_value in count]
if len(occurences) == len(count_x):
occurences_result.append(min(occurences))
rows_result.append(row)
return((occurences_result, rows_result))
print(myfunct(y,z))