相关疑难解决方法(0)

如何在MATLAB中编写矢量化函数

我只是学习MATLAB,我发现很难理解循环与矢量化函数性能因素.

在我之前的问题中:嵌套for循环在MATLAB中非常慢(预分配)我意识到使用矢量化函数与4个嵌套循环在运行时间上产生7倍的差异.

在该示例中,不是循环遍历4维阵列的所有维度并计算每个向量的中值,而是仅调用中值(stack,n)更清洁和更快,其中n表示中值函数的工作维度.

但中位数只是一个非常简单的例子,我很幸运,它实现了这个维度参数.

我的问题是你如何自己编写一个函数,它与实现这个维度范围的函数一样有效

例如,您有一个my_median_1D仅适用于1-D向量并返回数字的函数.

你如何my_median_nD通过采用n维数组和"工作维度"参数来编写一个像MATLAB的中位数一样的函数?

更新

我找到了更高维度计算中位数的代码

% In all other cases, use linear indexing to determine exact location
% of medians.  Use linear indices to extract medians, then reshape at
% end to appropriate size.
cumSize = cumprod(s);
total = cumSize(end);            % Equivalent to NUMEL(x)
numMedians = total / nCompare;

numConseq = cumSize(dim - 1);    % …
Run Code Online (Sandbox Code Playgroud)

performance matlab loops for-loop vectorization

6
推荐指数
3
解决办法
4705
查看次数

将 9 个字符数字转换为 int 或 unsigned int 的最疯狂的快速方法

#include <stdio.h>
#include <iostream>
#include <string>
#include <chrono>
#include <memory>
#include <cstdlib>
#include <cstdint>
#include <cstring>
#include <immintrin.h>
using namespace std;

const int p[9] =   {1, 10, 100, 
                    1000, 10000, 100000, 
                    1000000, 10000000, 100000000};
                    
class MyTimer {
 private:
  std::chrono::time_point<std::chrono::steady_clock> starter;

 public:
  void startCounter() {
    starter = std::chrono::steady_clock::now();
  }

  int64_t getCounterNs() {    
    return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now() - starter).count();
  }
};
                    
int convert1(const char *a) {
    int res = 0;
    for (int i=0; i<9; i++) res = res * 10 + a[i] - 48; …
Run Code Online (Sandbox Code Playgroud)

c++ optimization assembly sse x86-64

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

在R中,计算字符串向量内的表达式

我想评估一个包含算术表达式的字符串向量 - "1 + 2","5*6"等.

我知道我可以将单个字符串解析为表达式,然后将其评估为eval(parse(text="1+2")).

但是,我更愿意在不使用for循环的情况下评估向量.

foo <- c("1+2","3+4","5*6","7/8") # I want to evaluate this and return c(3,7,30,0.875)
eval(parse(text=foo[1])) # correctly returns 3, so how do I vectorize the evaluation?
eval(sapply(foo, function(x) parse(text=x))) # wrong! evaluates only last element
Run Code Online (Sandbox Code Playgroud)

evaluation r arithmetic-expressions

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

numpy数组中的向后计数

假设我有一系列这样的整数值排列在一个numpy数组中。

nan = np.nan
arr = np.array([3, nan, nan, nan, 5, nan, nan, nan, nan, nan])
Run Code Online (Sandbox Code Playgroud)

nan 值应填充从第一个非空值到零的倒数。

[3, 2, 1, 0, 5, 4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

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

如何将数字转换为十六进制?

给定寄存器中的数字(二进制​​整数),如何将其转换为十六进制ASCII数字字符串?

数字可以存储在存储器中或即时打印,但存储在存储器中并一次打印通常更有效.(您可以修改存储的循环,而不是一次打印一个循环.)

我们能否有效地处理与SIMD并行的所有半字节?(SSE2或更高版本?)

x86 assembly hex simd avx512

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

c++20 执行策略类型

我一直在研究标准算法,并注意到您可以指定执行策略。

此处的文档列出了 4 项政策:

std::execution::sequenced_policy  
std::execution::parallel_policy 
std::execution::parallel_unsequenced_policy  
std::execution::unsequenced_policy
Run Code Online (Sandbox Code Playgroud)

我了解并行策略和有序策略之间的区别,但我不确定为什么您还需要未排序和未排序的并行?

据我所知,无论如何您都无法保证线程执行顺序,所以这不会使并行和并行未排序策略相同吗?

如果您不能并行化策略自动回退到顺序策略,为什么要添加正常的未排序策略?

我错过了什么?

c++ c++17 c++20

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