【发布时间】:2019-10-01 17:27:26
【问题描述】:
我希望使用 numpy 从 Matlab 过渡到 Python。我在理解使用 numpy 的数组索引时遇到了一些困难。
例如,我希望使用“for”循环将行向量的内部元素分配为特定值。在索引 1 级列数组与行数组时,numpy 中的索引似乎是独一无二的。
# Python:
import nump as np
from numpy import*
import scipy.linalg
N = 5
L = 1.0
dx = L / N
S = 10.0 ** -2.0
k = 500.0
aW = zeros((1, N))
for i in range(1, (N-1)):
aE[0, i] = k * S / dx
% Matlab:
N=5;
L=1.0;
dx=L/N;
S=10^(-2.0);
k=500.0;
aW=zeros(1,N);
for i = 2:N-1
aE(i)=k*S/dx;
end
我是否需要指定行索引为0,而不是只说:
'aE[i] = k * S / dx'
在基于索引的单个输入分配元素时,Matlab 似乎并不关心矩阵的维度。
我对说明行索引没有意见。它让我更加意识到我的可变维度。我只是想验证它是必要的。也许我错误地设置了向量。非常感谢您的帮助。
【问题讨论】:
-
在
numpyaE[0]中确实是aE[0, :]。它索引数组的第一个维度。您可以将数组定义为aE = np.zeros((N,),在这种情况下它将是 1d。一个关键的区别是,在 MATLAB 中,一切都是 2d(或更大)的。 -
为什么要迭代地设置数组的所有值(具有相同的标量值)?在我以前的 MATLAB 时代,那效率会很低。
-
在
numpy中,前导维度是外部维度;在 MATLAB 中,它是尾随的。所以你也可以定义aE=np.zeros((N,1))来创建一个“列向量”,并使用aE[i]进行迭代。有时这是必要的,但通常一维数组就可以了。 -
代码来自本科作业。考虑到您可以将元素 2:N-1 分配为常量标量值,也许在我的问题中包含它是一个糟糕的例子。话虽如此,我更关心的是索引的方式。据我所知,似乎迭代行向量需要声明行(即在这种情况下为 0)。这很好,只是我必须考虑的细微差别。正如你所提到的,我可能会坚持使用列向量。我不确定这在我的代码中出现的频率。就我而言,这可能取决于我导入的数据。
标签: python-3.x numpy