gpt4 book ai didi

python - 用于在 python 中循环数组 - 来自 matlab

转载 作者:行者123 更新时间:2023-12-01 04:41:58 25 4
gpt4 key购买 nike

假设您有以下 MATLAB 代码部分,在迭代时循环并修改矩阵内的索引值:

x = zeros(parts,2);
for i = 1:parts
x(i,1) = (i-1)*L + 1;
x(i,2) = i*L;
end

现在假设你是一个 Python 菜鸟,并且已经做到了这一点:

v = np.zeros((parts,2))
for x in xrange(0,N1/L):

其中 parts 和 N1/L 是预定义的整数值。我已经在 python 中对索引和 for 循环进行了一些搜索,但我很难理解如何引用特定索引并在 for 循环中修改它们。如果有人能够指导我正确的方向以了解如何攻击代码的下一部分,我将不胜感激。

最佳答案

Matlab 代码的直译是

import numpy as np
x = np.zeros((parts, 2))
for i in range(parts):
x[i,0] = i*L + 1
x[i,1] = (i+1)*L

请注意,Matlab 使用从 1 开始的索引,而 Python 使用从 0 开始的索引。这解释了 1 出现位置的差异。

但是,在使用 NumPy 时,如果避免对数组进行逐元素修改,您将获得更好的性能。相反,您应该寻求用尽可能少的 NumPy 运算符或函数调用来表达计算,这些运算符或函数调用会同时影响整个数组。通过这样做,您可以将尽可能多的工作转移到 NumPy 的底层快速 C/Fortran 编译函数调用上,并减少执行较慢的 Python 代码所花费的时间。

这通常意味着您想要避免 Python for 循环,因为循环意味着存在将执行大量Python语句。

例如,表达上述计算的更好方法是

x = np.zeros((parts, 2))
x[:, 0] = np.arange(1, parts*L, L)
x[:, 1] = x[:, 0] + L - 1

请注意,x 中的值仅使用 2 次赋值来填充。每个赋值会“一次性”影响 x 的整列。

<小时/>

为了了解基于数组的操作有何不同,这是使用 parts = 10000L = 3 的 ( IPython ) timeit 测试:

In [16]: %%timeit
....: x = np.zeros((parts, 2))
x[:, 0] = np.arange(1, parts*L, L)
x[:, 1] = x[:, 0] + L - 1
10000 loops, best of 3: 51.9 µs per loop

In [17]: %%timeit
....: x = np.zeros((parts, 2))
for i in range(parts):
x[i,0] = i*L + 1
x[i,1] = (i+1)*L
100 loops, best of 3: 3.58 ms per loop

关于python - 用于在 python 中循环数组 - 来自 matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30442603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com