标签: vectorization

对图像进行积分的有效方法

我有一个 2D 数组(典型大小约为 400x100),如图所示(它看起来像一个梯形,因为右下角的元素是 nan)。对于数组中的每个元素,我想对多个元素(大约 10 个元素)沿列执行数值积分。在物理语言中,将颜色视为力的大小,我想找到通过计算 Fdz 积分所做的功。我可以使用双 for 循环trap来完成这项工作,但是还有其他更有效的方法(可能是使用数组和矢量化)在 Matlab 或 python 中完成这项工作吗?我的最终目标是找到评估积分最大的点。因此,从黄色代表大值的图像中,我们期望积分在虚线上方右侧某处最大。

另外,如果我想要积分的点数是整数,那么相对容易,但是如果我想要积分,比如 7.5 个点怎么办?我正在考虑使用fit插值点,但我不确定这是否使任务过于复杂。

在此输入图像描述

arrays matlab numpy vectorization integral

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

在纯 numpy 中矢量化康威的生命游戏?

我想知道是否有一种方法可以实现康威的生命游戏,而无需求助于 for 循环、if 语句和其他编程典型的控制结构。对循环进行矢量化应该很容易,但是如何将对邻域的检查转换为矩阵运算?

基本逻辑是这样

def neighbors(cell, distance=1):
    """Return the neighbors of cell."""
    x, y = cell
    r = xrange(0 - distance, 1 + distance)
    return ((x + i, y + j) # new cell offset from center
            for i in r for j in r # iterate over range in 2d
            if not i == j == 0) # exclude the center cell
Run Code Online (Sandbox Code Playgroud)

我希望模组不会认为这是偏离主题的,我真的很好奇,而且我刚刚开始使用 CA。

干杯

python numpy linear-algebra vectorization cellular-automata

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

Tensorflow 中张量的 For 循环

我是张量流新手,我想使用多个 if-else 条件创建一个张量。我只是不知道该怎么做。

在 python 中,如果张量类似于[3,3,3],我可以使用for循环,如下所示:

for i in range(3):
   for j in range(3):
      for k in range(3):
         if tensor[i,j,k]>10:
            tensor[i,j,k]=tensor[i,j,k]-10
         elif tensor[i,j,k]<4:
            tensor[i,j,k]=tensor[i,j,k]+60
Run Code Online (Sandbox Code Playgroud)

之后我仍然想使用张量计算loos函数,然后进入下一个循环进行训练。有谁知道如何做到这一点?我知道如何在会话中以单一方式执行此操作。但我不知道如何在训练循环中做到这一点。

for-loop vectorization multidimensional-array tensorflow tensor

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

将 math.erf 应用于数组

我正在使用 math.erf 来查找数组中每个元素的误差函数。

# Import the erf function from the math library
from math import erf
# Import the numpy library to represent the input data
import numpy as np

# Create a dummy np.array
dummy_array = np.arange(20)

# Apply the erf function to the array to calculate the error function of each element
erf_array = erf(dummy_array)
Run Code Online (Sandbox Code Playgroud)

我收到错误,因为我无法将整个函数应用于数组。有没有办法将误差函数应用于整个数组(矢量化方法),而无需循环遍历每个元素并应用它?(由于表很大,循环将花费很多时间)

python numpy function vectorization pandas

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

如何自动矢量化循环,其中 1) 修改数组,2) 指示数组最后是否更改?

我有这个 C++ 函数:

#include <stddef.h>

typedef unsigned long long Word;

bool fun(Word *lhs, const Word *rhs, size_t s)
{
    bool changed = false;
    #pragma omp simd
    for (size_t i = 0; i < s; ++i) {
        const Word old = lhs[i];
        lhs[i] |= rhs[i];
        changed = changed || old != lhs[i];
    }

    return changed;
}
Run Code Online (Sandbox Code Playgroud)

本质上,它是位向量 ( lhs |= rhs)的按位或实现。我对编写具有 SIMD 意识的代码很陌生,我无法弄清楚如何让编译器在不引入额外开销的情况下对其进行矢量化(例如,创建changed一个数组然后循环遍历它)。移除这changed = ...条线可以让一切都很好地进行矢量化。

我试过有omp simd没有。我不认为这是相关的,但我想保持它,因为lhsrhs从来没有重叠,我想补充的align最终条款。

目前,我正在使用 …

c c++ simd vectorization openmp

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

分类数据的响应编码

响应编码是一种向量化分类数据的技术。假设我们有一个名为“grade_category”的分类特征,它具有以下唯一标签 - [“grades_3_5”、“grades_prek_2”、“grades_9_12”、“grades_6_8”]。假设我们正在研究目标类标签为 0 和 1 的分类问题

在响应编码中,您必须输出特征中每个标签与特定类标签一起出现的概率值,例如,grades_prek_2 = [它与 class_0 一起出现的概率,它与 class 1 一起出现的概率]

vectorization python-3.x categorical-data

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

如何检查 Numpy 数组的每一行是否包含在辅助数组中?

我的问题类似于测试 Numpy 数组是否包含给定的行,但我需要对链接问题中提供的方法进行非平凡的扩展;链接的问题是询问如何检查数组中的每一行是否与另一行相同。这个问题的重点是对许多行这样做,其中一个显然不会跟随另一个。

说我有一个数组:

array = np.array([[1, 2, 4], [3, 5, 1], [5, 5, 1], [1, 2, 1]])
Run Code Online (Sandbox Code Playgroud)

我想知道这个数组的每一行是否在由以下给出的辅助数组中:

check_array = np.array([[1, 2, 4], [1, 2, 1]])
Run Code Online (Sandbox Code Playgroud)

理想情况下,这看起来像这样:

is_in_check = array in check_array
Run Code Online (Sandbox Code Playgroud)

其中 is_in_check 看起来像这样:

is_in_check = np.array([True, False, False, True])
Run Code Online (Sandbox Code Playgroud)

我意识到对于非常小的数组,使用列表理解或类似的东西会更容易,但是该过程必须对 10 6行的数组具有高性能。

我已经看到检查单行的正确方法是:

is_in_check_single = any((array[:]==[1, 2, 1]).all(1))
Run Code Online (Sandbox Code Playgroud)

但理想情况下,我想将其概括为多行,以便对过程进行矢量化。

在实践中,我希望看到每个数组的以下维度:

array.shape = (1000000, 3)
check_array.shape = (5, 3)
Run Code Online (Sandbox Code Playgroud)

python arrays numpy vectorization

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

如何用熊猫构造矢量化函数?

我不确定如何构建我想在 Pandas 中向量化的函数。

我有两个 df 这样的:

contents = pd.DataFrame({
'Items': [1, 2, 3, 1, 1, 2],
})

cats = pd.DataFrame({
'Cat1': ['1|2|4'],
'Cat2': ['3|2|5'],
'Cat3': ['6|9|11'],
})
Run Code Online (Sandbox Code Playgroud)

我的目标是为每一行添加.insert一个新列contents1如果contents['Items']是元素cats['cat1']0其他。这是要重复每cat

目标格式:

contents = pd.DataFrame({
'Items': [1, 2, 3, 1, 1, 2],
'contains_Cat1': [1, 1, 0, 1, 1, 1],
'contains_Cat2': [0, 1, 1, 0, 0, 1],
'contains_Cat3': [0, 0, 0, 0, 0, 0],
})
Run Code Online (Sandbox Code Playgroud)

由于我的内容 df 很大(!),我想对其进行矢量化。我对每只猫的做法是做这样的事情

contents.insert(
    loc=len(contents.columns), …
Run Code Online (Sandbox Code Playgroud)

python vectorization pandas

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

计算 Pandas 中具有相同列值的行的平均值

我正在尝试将三个 pandas DataFrame 组合在一起

其中一个(称为major)有一列category,其中每一行都有一个唯一的标签:

major_df = pd.DataFrame(np.random.randint(0, 100, size=(3, 2)), columns=list("AB"))
major_df["category"] = pd.Series(["cat_A", "cat_B", "cat_C"])
Run Code Online (Sandbox Code Playgroud)
    A   B category
0  90  17    cat_A
1  36  81    cat_B
2  90  67    cat_C
Run Code Online (Sandbox Code Playgroud)

另外两个 dfs(称为minor)包含多行并具有自己唯一的列名称。每个 df 都有一个列category,其中每行都有一个出现在主要 df 类别列中的值:

    A   B category
0  90  17    cat_A
1  36  81    cat_B
2  90  67    cat_C
Run Code Online (Sandbox Code Playgroud)

下面是这些次要 dfs 之一的示例。两者之间的唯一区别是第一个次要 df 具有列CD,第二个具有列EF

    C   D category
0  71  44 …
Run Code Online (Sandbox Code Playgroud)

python loops vectorization dataframe pandas

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

根据行号更改 2d numpy 数组中行的每个第 n 个元素

我有一个二维数组:

H = 12
a = np.ones([H, H])
print(a.astype(int))

[[1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

numpy vectorization

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