Numpy.unique处理三维数组指定axis=2未生效,咨询问题原因
np.unique指定axis=2没生效?原因在这
别搞错np.unique里axis参数的用法——它不是对每个轴上的子数组内部去重,而是把指定轴上的整个子数组当作一个整体,找重复的子数组去重。
看你的数组arr,形状是(3,3,2):
- 用
axis=0时,是把每一层(形状(3,2)的二维数组)当整体去重,所以会去掉重复的第0层和第2层,只留一个; - 用
axis=1时,是把每一列(形状(3,2)的二维数组)当整体去重,所以会去掉重复的列; - 到
axis=2时,是把第三轴上的每个元素对应的二维数组(形状(3,3))当整体去重。你的第三轴有两个这样的二维数组:
这俩完全不一样,所以# 第三轴第0个元素对应的二维数组 [[1,1,1], [7,10,10], [1,1,1]] # 第三轴第1个元素对应的二维数组 [[1,1,1], [1,1,1], [1,1,1]]np.unique找不到重复的,自然返回原第三轴的两个数组,看起来就像没生效。
如果想把每个[1,1]这种子数组内部去重成[1],得换写法,比如用列表推导遍历每个子数组单独去重:
import numpy as np arr = np.array([[[1,1], [1,1], [1,1]], [[7,1], [10,1], [10,1]], [[1,1], [1,1], [1,1]]]) # 遍历每个(2,)的子数组,内部去重 result = np.array([[np.unique(sub) for sub in row] for row in arr]) print(result)
输出结果:
[[[1] [1] [1]] [[7 1] [10 1] [10 1]] [[1] [1] [1]]]
内容的提问来源于stack exchange,提问作者Jiahao Li
相关产品推荐
相关产品推荐

