我想在R中编写一个计算基本对称多项式的函数。对于i = 0,1,...,p,第i个基本多项式为
如何在R中编写此函数的代码?我试过了
x<-c(1,2,3,4)
crossprod(x)
# or
for (i in 1:length(x)) print(crossprod((combn(x,i))))
Run Code Online (Sandbox Code Playgroud)
但我没有得到想要的结果
e0 = 1
e1 = 10
e2 = 35
e3 = 50
e4 = 24
我目前正在 Julia 中编码,在某些时候,我必须在命令提示符下运行一个 .exe 程序。让我们将该程序命名为“x.exe”。我决定将以下行添加到我的代码中,以便 Julia 执行代码中的程序:
run(pipeline('x.exe input.txt 5 500',stdout="output.txt"))
代码运行良好,但我必须手动插入值“5”和“500”,它们分别是 input.txt 文件中的行数和 input.txt 文件中每行的项目数。它们也是存储在 Julia 中的数组的行数和列数。
有没有办法让代码直接读取这些数字?我试过
writedlm("size.txt", transpose([size(Array)[1],size(Array)[2]])," ")
进而
run(pipeline('x.exe input.txt type size.txt',stdout="output.txt"))
但它不起作用......
我在 Julia 中创建了以下函数:
using StatsBase
function samplesmallGram(A::AbstractMatrix)
n=size(A,1)
kpoints=sort(sample((1:n),Int(0.05*n),replace=false))
Lsmall=A[kpoints,kpoints]
return kpoints,Lsmall
end
Run Code Online (Sandbox Code Playgroud)
我想L
通过map()
命令而不是for
循环将此函数应用于我拥有的对称方阵 10 次。我试过
map(samplesmallGram(L), 1:1:10)
Run Code Online (Sandbox Code Playgroud)
但它不起作用...我怎样才能实现这个目标?
我想知道Julia中是否有命令或包允许我们直接提取矩阵的下三角部分,不包括对角线.我可以为此调用R命令(比如gdata包的lowerTriangle),但是我想知道Julia是否有类似的东西.例如,假设我有矩阵
1.0 0.751 0.734
0.751 1.0 0.948
0.734 0.948 1.0
Run Code Online (Sandbox Code Playgroud)
我不想创建一个下三角矩阵
NA NA NA
0.751 NA NA
0.734 0.948 NA
Run Code Online (Sandbox Code Playgroud)
但是将矩阵的下半部分提取为数组: 0.751 0.734 0.948
为什么这段非常简单的代码会在 Julia 1.1 中导致错误?
Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
println(value^index)
end
Run Code Online (Sandbox Code Playgroud)
显示的错误是:
Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
Run Code Online (Sandbox Code Playgroud)
我想在使用迭代器的Threads.@threads
地方使用更复杂的代码enumerate
。
我必须for
在 Julia 中编写一个非常简单的循环,我将其复制如下:
result=fill([],6,1)
E=rand(5,5)
D=3.27
k=2
for s in [0.5,0.75,1,1.25,1.5,2]
result[??]=exp.(-(E.^2/D)/(2*s*k))
end
Run Code Online (Sandbox Code Playgroud)
在每次迭代中,我希望 的第i
-th 元素result
填充函数的结果,该函数使用i
array 的第 -th 元素[0.5,0.75,1,1.25,1.5,2]
。所以我不知道括号里应该放什么[??]
。到目前为止,我尝试过
for (index, value) in enumerate([0.5,0.75,1,1.25,1.5,2])
result["$index"]=exp.(-(E.^2/D)/(2* "$value" *k))
end
Run Code Online (Sandbox Code Playgroud)
但它不起作用。有什么提示吗?
是否可以使用writedlm
命令为Julia中循环的每次迭代更改文件名?例如,使用以下代码,在每次迭代时,文件名每次都会被覆盖,我想避免这种情况,在每次迭代中都使用每个索引使用不同的名称i
:
using DelimitedFiles
for i=1:100
data=rand(50,1000)
writedlm("candidates.txt", data, " ")
end
Run Code Online (Sandbox Code Playgroud)
我该如何实现?
例如,假设我们在Julia中有一个6元素数组Int64[1,1,2,3,3,4]
.如果我们想要按元素比较两个数组,我们知道我们可以使用".=="; 但我的目标是在上面的数组中进行所有成对比较:如果每对中的元素(i,j)相等,我将其设置为1(或者为真),但如果它们不同,我将其设置为0所有成对比较都存储在6x6矩阵中.没有循环可以在朱莉娅那样做吗?谢谢.
比方说,我有一个对称矩阵A
,例如
> A <- matrix(runif(16),nrow = 4,byrow = T)
> ind <- lower.tri(A)
> A[ind] <- t(A)[ind]
> A
[,1] [,2] [,3] [,4]
[1,] 0.4212778 0.6874073 0.1551896 0.46757640
[2,] 0.6874073 0.5610995 0.1779030 0.54072946
[3,] 0.1551896 0.1779030 0.9515304 0.79429777
[4,] 0.4675764 0.5407295 0.7942978 0.01206526
Run Code Online (Sandbox Code Playgroud)
我也有一个4 x 3
矩阵B
,给出矩阵的特定位置A
,例如:
> B<-matrix(c(1,2,4,2,1,3,3,2,4,4,1,3),nrow=4,byrow = T)
> B
[,1] [,2] [,3]
[1,] 1 2 4
[2,] 2 1 3
[3,] 3 2 4
[4,] 4 1 3
Run Code Online (Sandbox Code Playgroud)
的 …