julia - 具有来自另一个向量的元素的长度为 N 的向量(有重复)

标签 julia

是否有任何简单的方法来生成长度为 N 的排列数组,从 k 个值中提取?示例:

N = 2
k = [[0 0], [0 1], [1 0], [1 1]]
Permutations = [
    [[0 0], [0 0]],
    [[0 0], [0 1]],
    [[0 0], [1 0]],
    [[0 0], [1 1]],
    [[0 1], [0 0]],
    [[0 1], [0 1]],
    [[0 1], [1 0]],
    [[0 1], [1 1]],
    ...
]

这里有一个重要说明:如果可能的话,我希望结果一直是数组(Iterators 包中的 product 函数生成元组)

如果有帮助,Haskell 等价物将是:replicateM 2 [[0, 0], [0, 1], [1, 0], [1, 1]]

以防万一有更惯用的方法来实现我正在尝试做的事情,这是我正在编写的函数:

function generate_states(length)
    # "tuples" contains what I want, but it needs a lot of transformation to 
    # be usable later
    tuples = [collect(t) for t in
              product([product(0:1, 0:1) for _ in 1:length]...)]
    states = collect(distinct(imap(x -> kron([[i...] for i in x]...), tuples)))
    return states
end

哪个有效,并且做我想做的,但理想情况下我希望它看起来像这样:

function generate_states(length)
    arrays = replicateM(3, Array[[0 0], [0 1], [1 0], [1 1]])
    states = collect(distinct(imap(x -> kron(x...), arrays)))
    return states
end

最佳答案

更新/修复

题目实际上是想从k中生成所有长度为N的元素序列。

这可以通过以下方式实现:

using Iterators   # install package with `Pkg.add("Iterators")`

N = 2
k = Array[[0 0], [0 1], [1 0], [1 1]]
res = [Array[e...] for e in product(fill(k,N)...)]

旧的解释 - 对象的排列

collect(combinations(['a','b','c','d'],2)) 生成正确的集合,忽略被排列的元素。

代码 [0 0] 中的特定元素是行向量(即 1x2 矩阵)。这比 Julia 中的列向量更尴尬。列向量的例子是:

julia> combinations(Array[[0,0],[0,1],[1,0],[1,1]],2) |> collect
6-element Array{Array{Array{Int64,1},1},1}:
 [[0,0],[0,1]]
 [[0,0],[1,0]]
 [[0,0],[1,1]]
 [[0,1],[1,0]]
 [[0,1],[1,1]]
 [[1,0],[1,1]]

请注意 [] 的显式类型,以防止 vcat 对内部元素进行扁平化。使用行向量,如 OP 中所示:

combinations(Array[[0 0],[0 1],[1 0],[1 1]],2) |> collect

(标准输出很乱)

关于julia - 具有来自另一个向量的元素的长度为 N 的向量(有重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864784/

相关文章:

string - 在某个字符后从字符串数组中删除所有内容

Julia - 对从另一个函数返回的矩阵求幂

dictionary - 在 Julia 中检查复杂类型时规范不足

dataframe - Julia DataFrames 中是否有 diff() 函数,比如 Pandas?

types - Julia 中的值类型实例

arrays - Julia 将图像从 URL 直接下载到内存中

matplotlib - 在带有 julia 内核的 jupyter 实验室中使用 %matplotlib 小部件

julia - IJulia笔记本内核报错--Jupyter启动内核失败

julia - 如何将原始二进制数组数据加载到 Julia 中并显示它?

julia - Julia 中的逐元素复合赋值运算符