【发布时间】:2021-03-15 13:27:44
【问题描述】:
在 NumPy 中,如果我有矩阵:
[2 4 3
2 8 5
7 6 9]
数字二出现了两次。如果是这样,我该如何检查并返回一个布尔值表示 true?
更新:如果矩阵是
[2 0 3
1 5 0
9 6 7]
我如何做到这一点,以便忽略零。这里有两个零,但我们不关心它们,只希望在非零数字重复时返回 true。
【问题讨论】:
标签: python arrays numpy matrix
在 NumPy 中,如果我有矩阵:
[2 4 3
2 8 5
7 6 9]
数字二出现了两次。如果是这样,我该如何检查并返回一个布尔值表示 true?
更新:如果矩阵是
[2 0 3
1 5 0
9 6 7]
我如何做到这一点,以便忽略零。这里有两个零,但我们不关心它们,只希望在非零数字重复时返回 true。
【问题讨论】:
标签: python arrays numpy matrix
您可以使用带有返回计数的 np.unique,如下所示:
c = np.unique(array, return_counts=True)
(c[1]-1).any()
如果数组中存在任何重复,则返回 true。您从中减去 1,以便它不包括仅出现一次的值。如果您想忽略零,您可以将该语句更改为此
c = np.unique(array[array != 0], return_counts=True)
(c[1]-1).any()
【讨论】:
使用 np.unique(),
import numpy as np
def hasRepeated(arr):
elements, counts = np.unique(arr, return_counts=True)
if np.any(counts != 1): return True
return False
arr = np.array(
[[2,4,3],
[2,8,5],
[7,6,9]]
)
print(hasRepeated(arr)) #True
【讨论】:
这是一种方法:
a = np.matrix([[1, 2],[2, 4]])
#convert matrix to list
a = a.tolist()
l = [value for sublist in a for value in sublist]
#use Counter for list, it gives a dictionary stating which element appeared how many times
from collections import Counter
C = Counter(l)
for val in C.values():
if val > 1:
print('True')
break
对于编辑,将代码的最后四行更改为:
for key,val in C.items():
if key != 0 and val > 1:
print('True')
break
【讨论】: