小编all*_*ije的帖子

部分gz解压缩可能吗?

对于处理存储为.gz文件的图像(我的图像处理软件可以读取.gz文件以获得更短/更小的磁盘时间/空间)我需要检查每个文件的标题.

标题只是每个图像开头的固定大小的小结构,对于未压缩的图像,检查它非常快.为了读取压缩图像,我别无选择,只能解压缩整个文件然后检查这个标题,这当然会减慢我的程序速度.

是否可以读取.gz文件的第一段(比如几个K),解压缩该段并读取原始内容?我对gz的理解是,在开始的一些簿记之后,压缩数据是按顺序存储的 - 这是正确的吗?

所以代替
1.打开大文件F
2.解压缩大文件F
3.读取500字节标题
4.重新压缩大文件F


1.开大文件F
2读出的第一5 K.从F作为料流A
3解压缩A作为流B
4从读500字节的头B

我正在使用,libz.so但其他语言的解决方案表示赞赏!

gzip partial gunzip libz

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

包含 <execution> 是否需要链接到 tbb?

在我的 Ubuntu 20 平台(使用 g++ 9.3.0)上的项目中,我使用以下行

#include <execution>
Run Code Online (Sandbox Code Playgroud)

通过标准库函数支持并行处理。我没有包含来自英特尔并行执行库 TBB 的任何内容。但是当我构建程序时,我收到消息:

#include <execution>
Run Code Online (Sandbox Code Playgroud)

-ltbb通过添加到链接器行,这很容易解决(例如:使消息消失) 。但后来我对 libtbb 产生了依赖,但我并没有指望它。

这种依赖性是预期的吗?是否可以在不安装的情况下使用并行执行tbb(但这tbb会覆盖安装时的默认设置)?

c++ parallel-processing std tbb execution

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

使用迭代器计算矩阵向量<vector <double >>的列和?

在前一个带有行意味着的列后向量中 - 使用std :: accumulate?我问是否有可能使用STL功能来计算矩阵的行方式

vector< vector<double> > data ( rows, vector<double> ( columns ) );
Run Code Online (Sandbox Code Playgroud)

@benjaminlindley的最佳答案不仅仅是我所寻找的,它还是一件美丽的事情.永远充满希望我认为计算列方法会很容易,所以STL相当于

vector<double> colmeans( data[0].size() );
    for ( int i=0; i<data.size(); i++ )
        for ( int j=0; j<data[i].size(); j++ )            
            colmeans[j] += data[i][j]/data.size();
Run Code Online (Sandbox Code Playgroud)

其中均值不是在每个内部计算的vector<double>,而是在所有向量中的相同索引中计算:

colmeans[0]       == ( data[0][0] + data[1][0] + ... data[rows][0] ) / rows
colmeans[1]       == ( data[0][1] + data[1][1] + ... data[rows][1] ) / rows
colmeans[2]       == ( data[0][2] + data[1][2] + ... data[rows][2] ) / rows
... …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector mean accumulate

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

列向量与行意味着 - 与std :: accumulate?

为了尽可能地懒惰,我在矩阵中读到了

vector< vector<double> > data ( rows, vector<double> ( columns ) );
Run Code Online (Sandbox Code Playgroud)

并尝试尽可能多地使用STL好吃的东西.

我接下来要做的一件事就是计算行的意思.在C风格的编程中

vector<double> rowmeans( data.size() );
for ( int i=0; i<data.size(); i++ )
    for ( int j=0; j<data[i].size(); j++ )
        rowmeans[i] += data[i][j]/data[i].size();
Run Code Online (Sandbox Code Playgroud)

In C++中,如何使用向量视图和gsl_stats_mean计算整数向量的均值?它解释了对于数字向量,您可以在一行中计算向量均值,而无需在每一步调用size()运算符:

double mean = std::accumulate(stl_v.begin(), stl_v.end(), 0.0) / stl_v.size();
Run Code Online (Sandbox Code Playgroud)

是否可以在向量向量上使用这些迭代器?中间形式是

vector<double> rowmeans( rows );
    for ( int i=0; i<data.size(); i++ )
        rowmeans[i] = std::accumulate(data[i].begin(), data[i].end(), 0.0) / data[i].size();
Run Code Online (Sandbox Code Playgroud)

已经1线走了!但是使用STL函数也可以摆脱[i]索引吗?(在顶层,这只是收集行的意思).

c++ stl vector mean accumulate

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

向量&lt;向量&lt;int&gt;&gt;在第一维上的点积

我有

vector < vector < int > > data_mat ( 3, vector < int > (4) );
vector          < int >   data_vec ( 3                     ); 
Run Code Online (Sandbox Code Playgroud)

其中,data_mat可以被看作是一个矩阵,data_vec为列向量,和我正在寻找一种方法来计算每列的内积data_matdata_vec,并将其存储在另一个vector < int > data_out (4)

使用和的示例http://liveworkspace.org/code/2bW3X5%241可用于计算矩阵的列总和:for_eachtransform

sum=vector<int> (data_mat[0].size());
for_each(data_mat.begin(), data_mat.end(),
         [&](const std::vector<int>& c) {
            std::transform(c.begin(), c.end(), sum.begin(), sum.begin(),
                           [](int d1, double d2) 
                             { return d1 + d2; }
                          );
            }
        );
Run Code Online (Sandbox Code Playgroud)

是否可以通过类似的方式(或使用STL函数的方式略有不同)来计算矩阵列与矢量的列点积?

问题在于,“ d2 = d1 + d2”技巧在此列内积案例中不起作用-如果有一种方法也可以包含d3来解决它(d3 = d3 …

c++ iterator vector matrix dot-product

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

std :: transform用于向量的向量

我在向量<vector <double >>中有数值数据,需要为它们添加标量值,如下所示:

vector <vector<double> > data ( M, vector<double>(N) );
vector <double>scalars(N);

data[0][0]     += scalars[0];
data[0][1]     += scalars[1];
...
data[0][N-1]   += scalars[N-1];

data[1][0]     += scalars[0];
data[1][1]     += scalars[1];
...
data[1][N-1]   += scalars[N-1];

...

data[M-1][N-1] += scalars[N-1];
Run Code Online (Sandbox Code Playgroud)

当然,这可以通过两个for循环来实现.我想知道它是否可以简单地使用transform,bind和plus来完成?我试图尽可能使用仿函数(尽管仍然习惯使用旧的C风格代码).

内部循环需要对数据中的向量0执行此操作:

transform ( data[0].begin(), data[0].end(), 
            scalars[0].begin(), 
            data[0].begin(), 
            plus<double>() )
Run Code Online (Sandbox Code Playgroud)

是否有可能将此行中的数据[0]替换为另一个计数器(与数据[0] ...数据[N-1]的变换相关)?这可能是一个标准问题,但我找不到一个好的参考.

c++ nested transform vector range

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

警告"<变量>上的操作可能未定义"

当我在c ++中使用重载[] []运算符来创建一个最小矩阵类

class matrix {
private:
  vector<T> elems_;
  size_t         nrows_;
  size_t         ncols_;  
public:
  T const* operator[] ( size_t const r ) const { return &elems_[r * ncols_]; }
  T*       operator[] ( size_t const r )       { return &elems_[r * ncols_]; }  
  matrix ();
  matrix ( size_t const nr, size_t const nc ) 
    : elems_( nr * nc ), nrows_( nr ), ncols_( nc ) 
  { }
  matrix ( size_t const nr, size_t const nc, T …
Run Code Online (Sandbox Code Playgroud)

warnings g++

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