如何在Julia中定义变异函数,您希望将结果写入其中一个输入.
我知道函数存在push!(list, a)
,它们会改变它们的输入但是如何使用感叹号定义我自己的一个.
我有一个非常大的网络的数据非常稀疏.我想知道无论两个节点是否连接,什么是最有效的内存存储和最容易访问的方式.
显然,对于N个节点,保持N*N矩阵在我存储的空间方面不是那么有效.所以我想到可能保留下面的邻接列表:
Array(Vector{Int64}, N_tmp)
Run Code Online (Sandbox Code Playgroud)
其中N_tmp <= N,因为许多节点可能没有任何连接.
你能帮我看看是否有更好的方法或者包装在内存和访问方面更好?
我正在制作一种我自己的类型,KeyVal
定义如下:
type KeyVal
first::Int
second::Float64
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个空/或初始化为零的矩阵,其元素的类型为KeyVal
。通常与我做的其他类型
myMat = zeros(KeyVal, (10,3))
Run Code Online (Sandbox Code Playgroud)
但这行不通,因为没有zeros
为这种复合类型定义。所以我尝试通过以下方式定义我自己的 zeros 函数:
import Base.zeros
function zeros(KeyVal,dims)
if length(dims) > 1
n=dims[1]
m=dims[2]
temp = repeat([KeyVal(0,0.0)], outer=m*n)
temp = reshape(temp, (n,m))
return temp
elseif length(dims) == 1
n=dims[1]
temp= repeat([KeyVal(0,0.0)], outer=n)
temp = reshape(temp, (n))
return temp
end
end
Run Code Online (Sandbox Code Playgroud)
这将添加到其他先前定义的方法列表中zeros
。但是使用它会产生错误:
myMat = zeros(KeyVal, (N,M))
MethodError: no method matching zero(::Type{KeyVal})
Closest candidates are:
.....
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以以某种方式解决这个问题,或者是否可以在类型构造函数中发出信号,以便任何涉及该类型的数据结构KeyVal
都在 (first = 0, second = …
initialization multidimensional-array composite-types julia type-constructor
我想知道是否可以将参数传递给include("file.jl")
. 例如,我们解析 中的 ARGSfile.jl
并在那里使用它们。类似于我们在命令行中传递参数的操作。
我最近遇到了沿不同轴以不同顺序扩展我使用的一些数值数组,并且repeat
Base 使用inner
和的功能outer
非常方便。但是,该kron
函数似乎速度更快,内存效率更高。有什么办法可以使用更通用的功能,例如repeat
使用此功能。我知道重复不限于数值数组,但使用此功能是否有意义?
function inner_repeat(
X::AbstractArray{T, 2},
K::Int64,
) where {T <: AbstractFloat}
return repeat(X, inner = (K, 1))
end
function inner_kron_repeat(
X::AbstractArray{T, 2},
K::Int64,
) where {T <: AbstractFloat}
return kron(X, ones(T, K, 1))
end
Xs = [rand(10^i, 10^i) for i in 2:4]
Ks = [i for i in 2:4]
for X in Xs
for K in Ks
println("matrix of size $(size(X)) with $(K) repeats")
println("using repeat:")
@btime inner_repeat($X, $K) …
Run Code Online (Sandbox Code Playgroud) 如何从LightGraphs和MetaGraphs中保存和加载MetaGraph对象,以便在加载元图时仍具有元数据?现在我有一个mg
使用以下方式保存的元数据:
LightGraphs.savegraph("net.lg", mg)
Run Code Online (Sandbox Code Playgroud)
但是尝试重新加载它:
reloaded = LightGraphs.loadgraph("net.lg")
Run Code Online (Sandbox Code Playgroud)
给我以下内容:
BoundsError: attempt to access 2-element Array{SubString{String},1} at index [3]
Run Code Online (Sandbox Code Playgroud)
无论如何,在MetaGaphs软件包中的元数据中有待阅读吗?
我LightGraphs.jl
在Julia中使用package(),它有一个预定义的直方图方法,可以创建网络的度分布g
.
deg_hist = degree_histogram(g)
Run Code Online (Sandbox Code Playgroud)
我想制作一个这方面的情节,但我很想在朱莉娅密谋.返回的对象是StatsBase.Histogram
以下内容作为其内部字段:
StatsBase.Histogram{Int64,1,Tuple{FloatRange{Float64}}}
edges: 0.0:500.0:6000.0
weights: [79143,57,32,17,13,4,4,3,3,2,1,1]
closed: right
Run Code Online (Sandbox Code Playgroud)
你能帮助我如何利用这个对象绘制直方图吗?
我有一个数组数组,称为y
:
y=Array(Vector{Int64}, 10)
Run Code Online (Sandbox Code Playgroud)
它基本上是一维数组(其中10个)的列表,每个1维数组的长度为5.以下是它们如何初始化的示例:
for i in 1:10
y[i]=sample(1:20, 5)
end
Run Code Online (Sandbox Code Playgroud)
每个一维阵列包括5点之间随机取样的整数1
到20
.
现在我施加的映射函数,其中对于每个在这些1维阵列的y
,不包括从该数字1
到20
:
map(x->setdiff(1:20, x), y)
Run Code Online (Sandbox Code Playgroud)
不过,我想,以确保在应用的功能y[i]
,如果输出setdiff(1:20, y[i])
包括i
,i
从结果中排除.换句话说,我想要一个像...一样的功能
setdiff(deleteat!(Vector(1:20),i) ,y[i])
Run Code Online (Sandbox Code Playgroud)
但随着map
.
主要是我的问题是你是否可以访问map
函数中的索引.
PS,我知道怎么做comprehensions
,我想知道是否有可能用地图做.
理解方式:
[setdiff(deleteat!(Vector(1:20), index), value) for (index,value) in enumerate(y)]
Run Code Online (Sandbox Code Playgroud) 我正在使用数组解析来定义自定义类型数组的元素的感兴趣值.
sum([value.interest for value in ArrayofMyType if condition])
Run Code Online (Sandbox Code Playgroud)
该表达式本身处于迭代循环中.这意味着每个周期,这种理解都使用新的记忆.此外,每次条件可能对所得到的阵列施加不同的长度,并且在循环外定义具有固定长度的预定义阵列可能不是最佳方式.
每次循环运行时都会产生开销,我不知道如何提高效率并更好地利用内存.有没有人可以用这个指导我?理解在风格上很方便但我觉得在我的情况下并不是最有效的.
代码风格是:
for i in 1:MAX_ITER
### Some code above
sum([value.interest for value in ArrayofMyType if condition])
### Some code below
end
Run Code Online (Sandbox Code Playgroud) 我想知道std::map
在julia中是否有任何等价物......仅仅为了映射的目的,我知道我可以使用Pair
类型,例如,但是其他类型是否具有更好的功能std::map
?
julia LightGraphs中的weakly_connected_components是否应该提供连接组件,如果将DiGraph转换为无向图,那么每个组件应该连接?我试过这个,我没有收到这样的组件?作为一个例子,我在政治博客数据上尝试了这个作为无向网络
data=readdlm(path,',',Int64) #contains edges in each row
N_ = length(unique(vcat(data[:,1],data[:,2]))) ##to get number of vertices
network = LightGraphs.DiGraph(N_)
#construct the network
for i in 1:size(data,1)
add_edge!(network, Edge(data[i,1], data[i,2]))
end
#largest weakly connected component
net = weakly_connected_components(network)[1]
temp_net,vmap = induced_subgraph(network, net)
Run Code Online (Sandbox Code Playgroud)
在获得最大的弱连接组件后,我看到以下内容:
isempty([i for i in vertices(temp_net) if isempty(edges(temp_net).adj[i])])
julia>false
Run Code Online (Sandbox Code Playgroud)
签名一些节点没有传入或传出边缘.可能是什么问题?我使用的是最新版本6,但LightGraphs软件包测试似乎正在运行.
julia ×11
arrays ×2
lightgraphs ×2
histogram ×1
io ×1
map-function ×1
metadata ×1
plot ×1
repeat ×1
stdmap ×1