小编mak*_*ghi的帖子

BLAS,LAPACK和ATLAS之间有什么关系

我不明白BLAS,LAPACK和ATLAS是如何相关的以及我应该如何一起使用它们!我一直在查看他们的所有手册,我对BLAS和LAPACK以及如何在我找到的极少数示例中使用它们有了一般概念,但我找不到任何使用ATLAS的实际示例来查看它与这两个.

我正在尝试对矩阵做一些低级别的工作,我的主要语言是C.首先我想使用GSL,但它说如果你想要最好的性能,你应该使用BLAS和ATLAS.有没有什么好的网页提供一些很好的例子,说明如何一起使用这些(在C中)?换句话说,我正在寻找使用这三个(或其中任何一个子集!)的教程.总之我很困惑!

c blas lapack atlas

131
推荐指数
3
解决办法
3万
查看次数

查找函数内部的数组长度

在下面的程序中,数组的长度ar在main中是正确的,但是temp它显示了ar我的计算机上指针的长度为2(以单位为单位sizeof(int)).

#include <stdio.h>

void temp(int ar[]) // this could also be declared as `int *ar`
{
    printf("%d\n", (int) sizeof(ar)/sizeof(int));
}

int main(void)
{
    int ar[]={1,2,3};
    printf("%d\n", (int) sizeof(ar)/sizeof(int));
    temp(ar);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何定义函数,以便在函数中正确读取数组的长度.

c arrays

18
推荐指数
4
解决办法
3万
查看次数

c中最有效的指针算术类型

我假设当我们写:(arr[i]相当于*(arr+i))时会发生内部强制转换.因为i例如可以是一个short,int或long或任何这些三个无符号的变体.

所以我的问题很简单:哪种类型应该i不会发生内部转换?这样代码可以最有效地运行?

粗猜:size_t?

c performance pointers pointer-arithmetic

14
推荐指数
1
解决办法
335
查看次数

SciPy curve_fit运行时错误,停止迭代

我正在scipy.optimize.curve_fit()以迭代的方式使用.

我的问题是,当它无法适应参数时,整个程序(以及迭代)停止,这就是它给出的错误:

RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.

我明白为什么它无法适应.我的问题是,有什么办法可以在Python 3.2.2中编写程序来忽略这种情况而只是继续吗?

python curve-fitting scipy

12
推荐指数
1
解决办法
1万
查看次数

Conda 打包和 C 库作为依赖项

Conda 在保持对包的必要依赖项的控制方面做得很好,但显然大多数包都将 C 库作为可跟踪的依赖项排除在外。例如,让我们使用以下命令安装 Gnuastro:

conda install -c conda-forge gnuastro
Run Code Online (Sandbox Code Playgroud)

然后,我查看 Gnuastro 程序之一链接的库(例如astnoisechisel):

$ ldd $(which astnoisechisel)
    linux-vdso.so.1 (0x00007ffdbd336000)
    libgnuastro.so.9 => /path/to/conda/install/envs/testenv/bin/../lib/libgnuastro.so.9 (0x00007fe039ce1000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe039b86000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe0399c6000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe0399a5000)
    libgit2.so.28 => /path/to/conda/install/envs/testenv/bin/../lib/./libgit2.so.28 (0x00007fe039882000)
    libtiff.so.5 => /path/to/conda/install/envs/testenv/bin/../lib/./libtiff.so.5 (0x00007fe039800000)
    liblzma.so.5 => /path/to/conda/install/envs/testenv/bin/../lib/./liblzma.so.5 (0x00007fe0397d7000)
    libjpeg.so.9 => /path/to/conda/install/envs/testenv/bin/../lib/./libjpeg.so.9 (0x00007fe039799000)
    libwcs.so.5 => /path/to/conda/install/envs/testenv/bin/../lib/./libwcs.so.5 (0x00007fe03963e000)
    libcfitsio.so.8 => /path/to/conda/install/envs/testenv/bin/../lib/./libcfitsio.so.8 (0x00007fe039311000)
    libcurl.so.4 => /path/to/conda/install/envs/testenv/bin/../lib/./libcurl.so.4 (0x00007fe03928b000)
    libz.so.1 => /path/to/conda/install/envs/testenv/bin/../lib/./libz.so.1 (0x00007fe03926f000)
    libgsl.so.23 => /path/to/conda/install/envs/testenv/bin/../lib/./libgsl.so.23 (0x00007fe038fc6000)
    libcblas.so.3 => /path/to/conda/install/envs/testenv/bin/../lib/./libcblas.so.3 (0x00007fe03740d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe03a049000)
    librt.so.1 …
Run Code Online (Sandbox Code Playgroud)

anaconda conda conda-forge

11
推荐指数
0
解决办法
1547
查看次数

python numpy中的长(> 2000万元素)数组求和

我是python和numpy的新手所以请原谅我,如果这个问题是如此简陋!我有一个负值数组(它已排序):

>>>neg
[ -1.53507843e+02  -1.53200012e+02  -1.43161987e+02 ...,  -6.37326136e-1 -3.97518490e-10  -3.73480691e-10]
>>>neg.shape
(12922508,)
Run Code Online (Sandbox Code Playgroud)

我需要将此数组添加到其副本(但具有正值)以查找分布的标准偏差平均为零.所以我做了以下事情:

>>>pos=-1*neg
>>>pos=pos[::-1] #Just to make it look symmetric for the display bellow!
>>>total=np.hstack((neg,pos))
>>>total
[-153.50784302 -153.20001221 -143.1619873  ...,  143.1619873   153.20001221  153.50784302]
>>>total.shape
(25845016,)
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好,但奇怪的是这个新数组的总和不是零:

>>>numpy.sum(total)
11610.6
Run Code Online (Sandbox Code Playgroud)

标准偏差也完全没有达到我的期望值,但我猜这个问题的根源与此相同:为什么总和不会导致零?

当我将这个方法应用于一个小数组时; 例如[-5,-3,-2],总和变为零.所以我猜问题在于数组的长度(超过2000万个元素).有什么办法可以解决这个问题吗?

如果有人能帮助我,我将非常感激.

python numpy

8
推荐指数
1
解决办法
743
查看次数

通过网格评估SmoothBivariateSpline

我有三列非结构化数据,并希望对它们进行双变量样条拟合.我对Python中的类不太好,所以我不明白如何做到这一点.为了表明我的问题,我做了一个简单的代码:

#! /usr/bin/env python3

import numpy as np
from scipy import interpolate

#an array of 3 columns:
a=np.zeros((200, 3))
a[:,0]=np.random.uniform(0,1,200)
a[:,1]=np.random.uniform(3,5,200)
a[:,2]=np.random.uniform(10,12,200)

#find the boundries
min_x, max_x = np.amin(a[:,0]), np.amax(a[:,0])
min_y, max_y = np.amin(a[:,1]), np.amax(a[:,1])

#Set the resolution:
x_res=1000
y_res=int( ( (max_y-min_y) / (max_x-min_x) )*x_res )

#Make a grid
grid_x, grid_y = np.mgrid[min_x:max_x:x_res*1j, min_y:max_y:y_res*1j]

sbsp=interpolate.SmoothBivariateSpline(a[:,0], a[:,1], a[:,2])

b=sbsp.ev(4,5)
#c=sbsp.ev(grid_x, grid_y)
print(b)
Run Code Online (Sandbox Code Playgroud)

这给出了一个点的插值,但如果你注释掉第二个最后一行,它就不起作用.如果有人能指导我如何在网格上进行样条插值,我将非常感激.提前致谢.

python interpolation scipy

6
推荐指数
1
解决办法
3559
查看次数

Unison 保留目录时间

在 Unison(双向文件同步程序)手册中,当您设置-times=true首选项时,只有文件的时间戳保持不变,目录不变:

从手册:

times 当此标志设置为 true 时,将传播文件修改时间(但不是目录修改时间)。

我想看看是否有任何方法可以在同步过程中保留目录时间?

directory timestamp sync unison

5
推荐指数
1
解决办法
1854
查看次数

在使用malloc时,C如何为2D(3D ...)数组分配空间?

我在理解C如何为2D(或更多维)数组分配空间时遇到了问题,特别是在我们使用malloc等时.以这个问题中的程序为例.

首先定义一维指针数组,然后将指向1D数据数组(在这种情况下为字符串)的指针放在第一个1D数组的每个框中.因此无法保证整个2D数组是连续的(前一行的最后一个单元后跟下一行的第一个单元).每个1D数据阵列可以非常远,只有它们的指针是连续的.我纠正还是错过了什么?如果你能帮助我澄清这一点,我将非常感激.

c malloc

3
推荐指数
1
解决办法
3533
查看次数

C预处理器保持多行

我需要在C中使用不同类型的几个数组上做同样的事情.

使用void *我编写了一个将接收所有类型的函数:

void
floatarraymanip(void *inarray)
{
  float *array=(float *)inarray;

  [SEVERAL LINES OF OPERATIONS]-------------
}                                          |
                                           |
void                                       |
longarraymanip(void *inarray)              ----> Same
{                                          |
  long *array=(long *)inarray;             |
                                           |
  [SEVERAL LINES OF OPERATIONS]-------------
}

void
arraymanip(void *array, char *arraytype)
{
  if(strcmp(arraytype,"FLOAT")==0)
    floatarraymanip(array);
  if(strcmp(arraytype,"LONG")==0)
    floatarraymanip(array);
}
Run Code Online (Sandbox Code Playgroud)

的[SEVERAL LINES OF OPERATIONS]是完全一样的和相对长(约50线).我还需要为其他几种类型执行此操作,使我的源代码的当前版本非常长!

所以我的问题是:有什么方法可以在预处理器中将所有这些行保存在一个命令中,并在所有这些函数中调用该预处理器变量,以便程序变得更短更可读?

c c-preprocessor

0
推荐指数
1
解决办法
109
查看次数