如何n
在Java中创建一个随机整数,在"线性递减分布" 之间1
和之间k
,即1
最有可能,2
不太可能,3
不太可能,......,k
最不可能,并且概率线性下降,如下所示:
我知道已经有关于这个主题的线程,我为制作一个新主题道歉,但我似乎无法从他们那里创造我需要的东西.我知道使用import java.util.*;
代码
Random r=new Random();
int n=r.nextInt(k)+1;
Run Code Online (Sandbox Code Playgroud)
在1
and 之间创建一个随机整数k
,均匀分布.
GENERALIZATION:任何提示创建任意分布的整数,即f(n)=some function
,P(n)=f(n)/(f(1)+...+f(k))
),也将受到赞赏,例如:
.
Julia 是否有一种有效的方法从给定的条目列表 (u,v,w)构建一个巨大的稀疏矩阵,其中一些可以具有相同的位置(u,v),在这种情况下,它们的权重 w 必须是总和。因此u,v,w
是输入向量,我希望创建一个w[i]
在 position 处具有值的稀疏矩阵u[i],v[i]
。例如,Mathematica 代码
n=10^6; m=500*n;
u=RandomInteger[{1,n},m];
v=RandomInteger[{1,n},m];
w=RandomInteger[{-9, 9}, m]; AbsoluteTiming[
SetSystemOptions["SparseArrayOptions"->{"TreatRepeatedEntries"->1}];
a= SparseArray[{u,v}\[Transpose] -> w, {n,n}]; ]
Run Code Online (Sandbox Code Playgroud)
需要 135 秒和 60GB 的 RAM。等效的 Python 代码
import scipy.sparse as sp
import numpy as np
import time
def ti(): return time.perf_counter()
n=10**6; m=500*n;
u=np.random.randint(0,n,size=m);
v=np.random.randint(0,n,size=m);
w=np.random.randint(-9,10,size=m); t0=ti();
a=sp.csr_matrix((w,(u,v)),shape=(n,n),dtype=int); t1=ti(); print(t1-t0)
Run Code Online (Sandbox Code Playgroud)
需要 36 秒和 20GB,但不支持 (2)。等效的 Julia 代码
using SparseArrays;
m=n=10^6; r=500*n; …
Run Code Online (Sandbox Code Playgroud) parallel-processing performance performance-testing sparse-matrix julia
如何在Mathematica中使用Java?
我有两个文件,GRASP.nb
并且GRASP.java
在同一个文件夹中(BTW:GRASP =贪婪的随机自适应搜索程序).该GRASP.java
文件包含一个方法public static int[] TSP(int[][] g, int numberOfIterations, int k)
.我想在Mathematica中调用这个方法.
我在Mathematica文档中读到,也在这里,我应该写
Needs["JLink`"];
InstallJava[];
obj=JavaNew[NotebookDirectory[]~~"GRASP.java"]
Run Code Online (Sandbox Code Playgroud)
要么
Needs["JLink`"];
InstallJava[];
obj=LoadJavaClass[NotebookDirectory[]~~"GRASP.java"]
Run Code Online (Sandbox Code Playgroud)
或类似的东西,但我尝试的任何东西,都会返回错误.我有WinXP,Mathematica 7,Eclipse 3.6.
任何工作的例子都将非常感激.