小编Mik*_*kin的帖子

计算成对产品,三元产品等的总和

1)问题表述:

给定长度为n的向量:a=[a1,a2,..,an]我需要计算向量b=[b1,b2,..bn],这样:

b1=a1+a2+...+an
b2=a1a2+a1a3+...+a1an+a2a3+...+a2an+...+a{n-1}an
b3=a1a2a3+a1a2a4+...+a1a2an+a1a3a4+...
...
bn=a1a2a3...an
Run Code Online (Sandbox Code Playgroud)

每个连续的条目b包含条目的a总和,成对产品的总和,三元产品等.

有没有人知道有效的算法,或者可能是现有的库实现?

我在想类似的东西

b1=sum(a)
b2=a1*sum(a[1,:])+a2*sum(a[2,:])+...
Run Code Online (Sandbox Code Playgroud)

同样适用于所有其他条目.

2)为什么我需要这个:

我想使用拉格朗日插值多项式展开来执行一维函数积分.我的问题是Newton-Cotes公式的扩展.该公式用于计算定积分.与Newton-Cotes不同,我想在选定的搭配点计算给定函数f的完全反微分特征,因此我必须整合每个拉格朗日插值多项式.

我不需要工作代码.我对算法更感兴趣,是否已经实现了.

谢谢,米哈伊尔

编辑:示例:

我们a=[1,2,3,4].

然后

b=[1+2+3+4,1*2+1*3+1*4+2*3+2*4+3*4,1*2*3+1*2*4+1*3*4+2*3*4,1*2*3*4]=[10,35,50,24]

python algorithm

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

为动态分配的阵列分配更多内存

我的C++算法获取大小未知的数据(它逐个检测图像上的粒子,我不知道在该算法完成其工作之前将检测到多少粒子).所以,首先我要分配具有10000个元素的数组,并且在处理期间,如果需要,可以多次分配另外10000个元素.

这是我尝试过的,它不起作用:

#include <iostream>
using namespace std;
int main(){
    int n = 3;
    int m = 3;
    float *a = new float[3];
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    float *b = a + 2;
    b = new float[3];
    b[0] = 4;
    b[1] = 5;
    cout << a[3] << endl;
} 
Run Code Online (Sandbox Code Playgroud)

结果,我得到负无穷大.当然,我可以在不同的数组中处理这个,我可以分配一次大量的内存.我之后需要将完整的检测数据传递给函数,因此,我希望有一个大数组.

但是,有没有办法增加动态分配方式的大小?在玩具示例中我想要的是将数组中的元素数量增加a3,因此它将具有6元素.

在Matlab中,这绝对是可能的.那么C++呢?

谢谢

c++ arrays memory-management

2
推荐指数
2
解决办法
3798
查看次数

用于矩阵-矩阵乘法的函数 numpy.dot()、@ 和方法 .dot() 之间有什么区别?

有什么区别吗?如果不是,那么约定俗成的首选是什么?性能似乎几乎相同。

a=np.random.rand(1000,1000)
b=np.random.rand(1000,1000)
%timeit a.dot(b)     #14.3 ms ± 374 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.dot(a,b)  #14.7 ms ± 315 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a @ b        #15.1 ms ± 779 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)

python numpy matrix-multiplication

2
推荐指数
1
解决办法
1500
查看次数

根据输入返回不同的输出组合

在我的功能,我有一个列表params_to_opt,可以包括任何以下项:'a','b','c','d','e'.

示例:params_to_opt=['c', 'e', 'a'].它可以包含我指定的任何数量(1到5)的条目.它始终包含至少一个上述条目.

根据此输入,我做了各种计算:

def MyFunction(params_to_opt):
    if 'a' in params_to_opt:
        out1 = ...
    if 'b' in params_to_opt:
        out2= ...
    if 'c' in params_to_opt:
        out3 = ...
    if 'd' in params_to_opt:
        out4= ...
    if 'e' in params_to_opt:
        out5 = ...
Run Code Online (Sandbox Code Playgroud)

现在我想只返回计算出的值.例如,如果params_to_opt=['c', 'e', 'a'],我会回来out1,out3out5.

问题是,如果我再次使用if .. else语句,我将不得不考虑31个可能的输出(5 + 10 + 10 + 5 + 1,具体取决于我的列表长度).

有没有办法更优雅地编码?我不关心性能,因为与每个out1,out2,out3,out4,out5的计算时间相比,输出的数量非常小.

谢谢,米哈伊尔

python algorithm function

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

Python:将多维numpy数组转换为数组列表

假设我有2D array,为简单起见a=np.array([[1,2],[3,4]]).我想将它转换list为数组,因此结果将是:

b=[np.array([1,2]), np.array([3,4])]

我发现有np.ndarray.tolist()功能,但它将ND数组转换为嵌套list.我本可以在一个for循环中完成(使用append方法),但它没有效率/优雅.

在我的实际例子中,我正在使用大约10000 x 50个元素的2D数组,我希望list它包含50个一维数组,每个都是形状(10000,).

python arrays numpy list

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

如何在c ++中删除const数组

我是C++的新手.我的代码读取了数千张图像并执行图像处理.我想在函数中读取原始图像,所以我将带有它名称的字符串传递给函数,然后创建常量char数组(只要我需要const char fopen).在函数结束时,我想删除它.但这引发了一个我无法解决的异常:

extern "C" void imreadTIFF(string location, int x, int y){
    const char * c = location.c_str();
    <code>
    delete [] c;
}


Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Run Code Online (Sandbox Code Playgroud)

我知道,这个问题被多次提出过.但我没有找到如何解决我的问题,也已经尝试了几种方法.

谢谢,米哈伊尔

c++

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