在c ++代码eclipse的中间,我需要计算矩阵A和B的乘法,大小为2400*3600(所以尺寸不一样).矩阵存储在浮点二维数组中.它们不稀疏,没有限制.
每次乘法需要很长时间(几分钟),我真的需要减少它,因为我有一个重复5000万次的循环.每次新的A和B应该相乘.欢迎任何类型的建议以减少时间复杂性.(甚至改变存储数据的结构,如果你认为这可能有帮助).例如,如果我将数据存储到一维数组中该怎么办?或者使用向量而不是数组?
在一种特定情况下,第一列始终为1,值为1,-1或0.这个案子有什么想法吗?
在其他情况下,值可以是任何东西.**这些乘法中的一个是X乘以其转置.这个特定的建议有什么建议吗?
class gene{
int ind;
gene() {
ind = 0;
}
}
class network {
gene g[10];
}
main() {
network n;
}
Run Code Online (Sandbox Code Playgroud)
我应该为g数组中的每个对象调用constuctor,还是会自动调用它?
例如,我应该如下更改网络类:
class network {
gene g[10];
network() {
for(int i = 0; i < 10; i++)
g[i] = gene();
}
}
Run Code Online (Sandbox Code Playgroud) 我使用以下代码在圆的下半部分绘制弧.
根据Apple的文档:
此方法创建一个打开的子路径.创建的弧位于指定圆的周长.在默认坐标系中绘制时,起始角和结束角基于图1中所示的单位圆.例如,指定0弧度的起始角度,π弧度的结束角度,以及将顺时针参数设置为YES绘制圆圈的下半部分.但是,指定相同的开始和结束角度但将顺时针参数设置为NO会绘制圆的上半部分.
我写
std::complex<double> start1( std::polar(190.0,0.0) );
CGPoint targetStart1 = CGPointMake(start1.real() + 342.0, start1.imag() + 220.);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, targetStart1.x, targetStart1.y);
CGPathAddArc(path, NULL, 342.0, 220.0, 190, 0.0, PI_180, YES );
CGContextAddPath(context, path);
CGContextSetLineWidth( context, 15.0 );
// set the color for the stroked circle
CGContextSetStrokeColorWithColor( context, [UIColor greenColor].CGColor);
CGContextStrokePath(context);
CGPathRelease(path);
Run Code Online (Sandbox Code Playgroud)
但是,圆弧在圆圈的上半部分绘制(参见绿色环).我想知道我是否不小心在代码中某处翻转了协调系统,但我不知道我应该搜索什么命令.
谢谢你的帮助.
在c ++程序中,当我想读取大小为2697806的向量时,我总是得到Segmentation fault错误.我已经尝试了所有可能的阅读方式:
void AUROC(vector<float> v) {
...
for(std::vector<int>::size_type i = 0; i != v.size(); i++)
if (v[i]>0) ++pos; else ++neg;
for(std::vector<long>::size_type i = 0; i != v.size(); i++)
if (v[i]>0) ++pos; else ++neg;
for (vector<float>::iterator i=v.begin(); i!=v.end(); ++i)
if (*i>0) ++pos; else ++neg;
for (long i=0;i<=v.size();i++)
if (v[i]>0) ++pos; else ++neg;
for(int i=0;i<=v.size();i++)
if (v[i]>0) ++pos; else ++neg;
}
...
int main(void) {
vector<float> scores;
// put data in scores;
AUROC(scores);
}
Run Code Online (Sandbox Code Playgroud)
对于尺寸小得多的矢量,这个问题永远不会发生.
谢谢你的帮助.最好的,Pegah
我试图找到一个java代码来计算Ax = b方程中的最小二乘解(x).假设
A = [1 0 0;1 0 0];
b = [1; 2];
x = A\b
Run Code Online (Sandbox Code Playgroud)
返回
x =
1.5000
0
0
Run Code Online (Sandbox Code Playgroud)
我找到了Class LeastSquares,
public LeastSquares(double[] a, double[] b, int degree)
Run Code Online (Sandbox Code Playgroud)
但是在输入中,A和B都是一维数组,但是,在上面的例子中,A是矩阵,B是数组.
在Class NonNegativeLeastSquares中
public NonNegativeLeastSquares(int M, int N, double a[][],double b[])
Run Code Online (Sandbox Code Playgroud)
A是一个矩阵,B是一个数组,但是该类的描述表明它找到了线性方程组Ax = b的近似解,使得|| Ax - b || 2被最小化,并且x > = 0.这意味着x必须始终为正.
我需要一个类似于NonNegativeLeastSquares的类,但是没有x> = 0约束.有人可以帮帮我吗?
非常感谢.
我有两个问题:
第一:
我有一个返回HashMap的函数.要读取返回的值,我这样写:
HashMap<Integer,String> hs=my_func2();
Run Code Online (Sandbox Code Playgroud)
如果函数返回HashSet,我也会这样做.
HashSet<Integer> hs=my_func();
Run Code Online (Sandbox Code Playgroud)
我想知道是否以这种方式将返回的值复制到hs中,或者我应该为它写一个深层副本,或者我应该这样写:HashSet hs = new HashSet(my_func()); HashMap hm = new HashMap(my_func2());
第二个问题:
我通过调用make_matrix_funciton创建一个矩阵.矩阵woule是一个二维数组,包含:
[0 1 1
0 0 0
0 0 0]
然后我将此矩阵赋给sort_vec,并在此函数中矩阵的元素发生变化.我认为java不是基于指针的,所以当我从sort_vec出来时,矩阵应该像以前一样.但是,它已经改变了!它是
[0 0 0
0 0 0
1 1 0]
,显示在sort_vec函数内应用的更改.这是正常的,如果是的话,我应该做些什么来防止它.下面的代码是可编译的.
public static void main(String args[]) {
int matrix[][]=new int[3][3];
matrix=make_matrix("011000000");
int indexes[]={2,1,0};
int[][] mat=sort_vec(3,matrix,indexes);
}
private static int[][] sort_vec(int motifsize,int [][]mat,int[] indexes)
{
int[] main_index={0,1,2};
int l=indexes.length;
for (Integer i=0;i<l;i++)
if(indexes[i]!=main_index[i])
{
int j=indexes[i];
int k=main_index[i+1];
for(;k<l;k++)
if(indexes[k]==main_index[i])
break;
indexes[k]=j; …
Run Code Online (Sandbox Code Playgroud) 我想在a和b(十进制)之间进行"AND"运算.b的值在代码中确定.结果,如果我写得像:
String g= Integer.toHexString(b);
int k=a & g;
Run Code Online (Sandbox Code Playgroud)
我得到错误,因为它应该是这样的:
int k=a & 0xFF;
Run Code Online (Sandbox Code Playgroud)
不知何故0x应该在十六进制值之前,同时它不能是String类型.对于第二个操作数可以是变量的情况,我没有在Internet中找到任何示例.我应该手动编写一个for循环来逐位应用AND操作,还是有一个直接的解决方案呢?我感谢您的帮助.
这段代码给了我平均值,但我不知道如何得到+ 1sd和-1 sd行.
y<-lowess(x[,1],x[,2],f=0.01)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我收到错误 ImportError: cannot import name 'timedelta'.
从我的代码中的这一行开始:
from datetime import timedelta, datetime
Run Code Online (Sandbox Code Playgroud)
我刚刚安装了熊猫pip install pandas
,也使用conda install -f pandas
我写的时候没有任何错误import pandas
。当我写which python
我得到/Users/zpu/miniconda3/bin/python
当我想调试第一行是
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
Run Code Online (Sandbox Code Playgroud) 我想比较两个Integer类型数组的值.当我比较它们的确切值时,我得到了错误的答案,当我将它们与Arrays.equals进行比较时得到了正确的答案:
Integer a[]=new Integer[2];
Integer b[]=new Integer[2];
a[0]=138;
a[1]=0;
b[0]=138;
b[1]=0;
boolean c;
c=a[0]==b[0];//c is false
c=Integer.valueOf(a[0])==Integer.valueOf(b[0]);//c is false
c=Arrays.equals(a, b);//c is true
Run Code Online (Sandbox Code Playgroud)