对于矩阵的每个元素,我都有一个方程式.假设a_i,j=i+j.

有没有一种方法可以使用NumPy为我的矩阵并行地初始化NumPy数组,或者我必须使用线程/其他并行技术?这些元素是相互独立的.

推荐答案

如果你真的想要并行化这个矩阵的初始化,也许还有其他操作,看看Numba.在您的情况下,您可以编写如下内容

import numba as nb
import numpy as np

N = 100

# Initialize memory
a = np.zeros((N,N), dtype=np.int64)

@nb.njit('void(int64[:,::1])', parallel=True, cache=True) #
def initialize_array (a):
    for i in nb.prange(a.shape[0]):
        for j in nb.prange(a.shape[1]):
            a[i,j] = i + j

initialize_array(a)

print(a[4,3]) # 7

这里的prange()表示并行化的循环.但您也可以只使用普通的Pythonrange(),因为Numba循环已经比原始的PythonFor循环快得多.但实际上,您应该只使用Numba来执行更复杂的操作.如果您的目标只是为了避免运行缓慢的Python for循环,那么您也可以这样做

import numba as nb
import numpy as np

N = 100

# Initialize memory
i = np.arange(N).reshape(-1,1)
j = np.arange(N).reshape(1,-1)

a = i + j

print(a[3,4]) # 7

Note that some numpy operations will sometimes use multiple threads.一般来说,如果你想用NumPy数组快速处理问题,你必须学会用矩阵/向量运算而不是用for循环来思考.希望这个能帮上忙!

Python相关问答推荐

将列中的滚动值集转换为单元格中的单个值

如何推迟对没有公钥的视图/表的反射?

使用imap-tools时错误,其邮箱地址包含域名中的非默认字符

如何知道标志是否由用户传递或具有默认值?

自定义新元未更新参数

如果AST请求默认受csref保护,那么在Django中使用@ system_decorator(csref_protect)的目的是什么?

如何让 turtle 通过点击和拖动来绘制?

Select 用a和i标签包裹的复选框?

try 与gemini-pro进行多轮聊天时出错

重新匹配{ }中包含的文本,其中文本可能包含{{var}

如何使用html从excel中提取条件格式规则列表?

输出中带有南的亚麻神经网络

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

删除字符串中第一次出现单词后的所有内容

Stacked bar chart from billrame

合并帧,但不按合并键排序

处理具有多个独立头的CSV文件

以逻辑方式获取自己的pyproject.toml依赖项

替换现有列名中的字符,而不创建新列