【问题标题】:Torch/Lua equivalent function to MATLAB or Numpy 'Unique'与 MATLAB 或 Numpy 'Unique' 等效的 Torch/Lua 函数
【发布时间】:2016-07-27 07:05:30
【问题描述】:

在 Python 中,可以执行以下操作来获取向量/矩阵/张量中的唯一值:

import numpy as np

a = np.unique([1, 1, 2, 2, 3, 3])
# Now a = array([1, 2, 3])

MATLAB 中也有类似的功能:

A = [9 2 9 5];
C = unique(A)
%Now C = [9, 2, 9]

Torch/Lua 中是否也有等效功能?

【问题讨论】:

    标签: python matlab numpy lua torch


    【解决方案1】:

    不,在现有的 Lua 和/或 Torch 中没有这样的标准函数。

    考虑使用set 数据结构的某些实现,滚动您自己的unique() 实现或重新设计您的应用程序以不需要这种功能。

    示例 11-liner:

    function vector_unique(input_table)
        local unique_elements = {} --tracking down all unique elements
        local output_table = {} --result table/vector
    
        for _, value in ipairs(input_table) do
            unique_elements[value] = true
        end
    
        for key, _ in pairs(unique_elements) do
            table.insert(output_table, key)
        end
    
        return output_table
    end
    

    相关问题:

    【讨论】:

    • 这不起作用!至少对于所有案例的 99.99999%。 ipairs 会在这里造成很多问题。
    • @Piglet 你愿意详细说明那些...... 99.99999% 的案例吗?
    • ipairs 仅迭代具有从 1 到 n 的整数键的表。它将停止第一个为 nil 的元素。因此,您可能不会考虑 input_table 的所有元素。然后将 unique_elements[value] 设置为 true。这仅在 value 是字符串或整数时才有效,并且它将创建一个表,其中键的元素很可能不是 1...n,没有任何间隙。在您的第二个 for 循环中当然需要使用 ipairs 来填充 output_table。
    • 是的,实现了最后一次ipairs() 通话。那是一个错字,已修复。不确定向量是否应该具有非整数键或键。所以,也没有差距。
    • 每个唯一值。我会通过额外且不需要的检查来对性能进行基准测试,因为这听起来就像是几个额外的滴答声。
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2023-03-03
    • 2014-05-31
    相关资源
    最近更新 更多