目录预览
1.【pytorch】——torch.unique
官方文档https://pytorch.org/docs/stable/generated/torch.unique.html
torch.unique(input, sorted=True, return_inverse=False, return_counts=False, dim=None)
默认参数说明
input: 待处理Tensor
sorted: 是否对处理后的不包含重复元素的Tensor进行升序排列(sorted=True表示进行升序排列,sorted=False并非表示降序排列,这点容易混淆,可以看下面例1)
return_inverse: 是否返回待处理Tensor中每个元素在处理后的无重复的Tensor中所对应的索引(看例2)
return_counts: 是否返回处理后的无重复元素的Tensor中每个元素在处理前Tensor中的统计数量(看例3)
dim: 沿着哪个维度进行unique的处理(待测试)
例1
# 下面三个例子说明当sorted=False时并非按照降序排列
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x)
out = torch.unique(x, sorted=False)
--------------------------------------------------------------------------------
tensor([0, 1, 2, 3, 4, 5, 7])
tensor([7, 5, 3, 2, 1, 0, 4])
y = torch.tensor([3,2,4,5,6,7,3,1,3,5,7,8,9,54,1,1,1,0,1])
out = torch.unique(y)
out = torch.unique(y, sorted=False)
--------------------------------------------------------------------------------
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 54])
tensor([ 0, 54, 9, 8, 1, 7, 6, 5, 4, 2, 3])
z = torch.tensor([1,3,5,7,9,0,8,6,4,2,34,5,6,7,8,9,1,3,6,7,8,9,53,2,3])
out = torch.unique(z)
out = torch.unique(z,sorted=False)
-------------------------------------------------------------------------------
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 34, 53])
tensor([53, 2, 4, 6, 8, 0, 9, 7, 34, 5, 3, 1])
例2
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x,return_inverse=True)
out = torch.unique(x,sorted=False,return_inverse=True)
--------------------------------------------------------------------------------
(tensor([0, 1, 2, 3, 4, 5, 7]), tensor([4, 0, 1, 2, 1, 2, 3, 5, 6]))
(tensor([7, 5, 3, 2, 1, 0, 4]), tensor([6, 5, 4, 3, 4, 3, 2, 1, 0]))
# 待处理Tensor:[4,0,1,2,1,2,3,5,7]
# 处理后Tensor:[0, 1, 2, 3, 4, 5, 7]
# 待处理Tensor在处理后Tensor中对应的索引:[4, 0, 1, 2, 1, 2, 3, 5, 6]
例3
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x,return_counts=True)
--------------------------------------------------------------------------------
(tensor([0, 1, 2, 3, 4, 5, 7]), tensor([1, 2, 2, 1, 1, 1, 1]))
# 处理后Tensor:[0, 1, 2, 3, 4, 5, 7]
# 处理后Tensor在处理前Tensor中的数量:[1, 2, 2, 1, 1, 1, 1]
2.python numpy判断两个数组相等
import numpy as np
# 创建两个数组
array1 = np.array([1, 2, 3])
array2 = np.array([1, 2, 3])
array3 = np.array([4, 5, 6])
# 使用array_equal来比较
equal1 = np.array_equal(array1, array2) # 应返回True
equal2 = np.array_equal(array1, array3) # 应返回False
print(equal1) # 输出: True
print(equal2) # 输出: False
3.Python numpy 统计数组某一元素的个数/ 统计数组满足条件的元素个数
我们在数据处理的时候,有时需要统计数组中某个元素的个数,如果写个循环就太麻烦了,numpy中有相应的函数进行统计。
3.1 np.sum() 进行统计
np.sum() 有个特性,当数组为[True,False]时会累加True的个数
所以当我们需要计算数组array中值value的个数时,使用语句:np.sum(data == value) 即可
当我们需要计算数组array中大于值value的个数时,使用语句:np.sum(data > value) 即可
实例1 统计等于某元素的个数:
import numpy as np
data=np.array([[1,2,3],[0,1,2],[3,4,5]])
print("查看数组中各位置是否为1 \n",data == 1)
n = np.sum(data == 1)
print("数组中1的个数",n)
输出结果:
查看数组中各位置是否为1
[[ True False False]
[False True False]
[False False False]]
数组中1的个数 2
实例2 统计满足条件的元素的个数
import numpy as np
data=np.array([[1,2,3],[0,1,2],[3,4,5]])
n = np.sum(data > 1)
print("数组中元素大于1的个数为",n)
结果
数组中元素大于1的个数为 6
4.如何统计二维或者多维空间/二维数组中重复元素的数量/计数?numpy一行代码就行了
4.1. 问题说明
统计一维数组中重复元素的数量是个常见的问题,那么拓展到二维或者更高维度,这个问题依然是常见的。有什么方法能快速解决这个问题呢?请接着往下看,代码就在下边。
4.2. 解决之道
numpy中的unique可以用来统计重复元素的个数,但是看网上有些资料说只适用于一维数组(如下图)。
事实果真如此吗?
我使用百度仔细检索发现了一篇很有用的文章,发现上图中说的是错误的,文章里边提到了怎么统计二维空间中重复点的数量。下边展示一下代码:
import numpy as np
a = np.array(
[
[1, 0, 0],
[1, 0, 0],
[1, 0, 0],
[2, 3, 4]
]
)
unique, unique_counts = np.unique(
a.view(a.dtype.descr * a.shape[1]),
return_counts=True
)
运行结果如下图:
说实话我看不懂view那一行是怎么个意思,但是我大受震撼。原来numpy可以如此强大!
哪位高人懂的可以在评论区指点一下。
4.3. 向原作者致敬
贴出原作图片,。
本文含有隐藏内容,请 开通VIP 后查看