Ваш linspace
на самом деле выглядит так, как будто это может быть np.linspace
.Если это так, вы можете работать с массивами numpy без явной итерации:
z = f(x[:, np.newaxis], y)
Например:
>>> import numpy as np
>>> x = np.linspace(0, 9, 10)
>>> y = np.linspace(0, 90, 10)
>>> x[:, np.newaxis] + y # or f(x[:, np.newaxis], y)
array([[ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.],
[ 1., 11., 21., 31., 41., 51., 61., 71., 81., 91.],
[ 2., 12., 22., 32., 42., 52., 62., 72., 82., 92.],
[ 3., 13., 23., 33., 43., 53., 63., 73., 83., 93.],
[ 4., 14., 24., 34., 44., 54., 64., 74., 84., 94.],
[ 5., 15., 25., 35., 45., 55., 65., 75., 85., 95.],
[ 6., 16., 26., 36., 46., 56., 66., 76., 86., 96.],
[ 7., 17., 27., 37., 47., 57., 67., 77., 87., 97.],
[ 8., 18., 28., 38., 48., 58., 68., 78., 88., 98.],
[ 9., 19., 29., 39., 49., 59., 69., 79., 89., 99.]])
Но вы также можете использовать np.ogrid
вместо двух linspace
:
импортировать numpy как np
>>> x, y = np.ogrid[0:10, 0:100:10]
>>> x + y # or f(x, y)
array([[ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90],
[ 1, 11, 21, 31, 41, 51, 61, 71, 81, 91],
[ 2, 12, 22, 32, 42, 52, 62, 72, 82, 92],
[ 3, 13, 23, 33, 43, 53, 63, 73, 83, 93],
[ 4, 14, 24, 34, 44, 54, 64, 74, 84, 94],
[ 5, 15, 25, 35, 45, 55, 65, 75, 85, 95],
[ 6, 16, 26, 36, 46, 56, 66, 76, 86, 96],
[ 7, 17, 27, 37, 47, 57, 67, 77, 87, 97],
[ 8, 18, 28, 38, 48, 58, 68, 78, 88, 98],
[ 9, 19, 29, 39, 49, 59, 69, 79, 89, 99]])
Это в некоторой степени зависит от того, кем вы являетесь f
.Если он содержит такие функции, как math.sin
, вам необходимо заменить их на numpy.sin
.
Если речь не идет о numpy
, тогда вам следует придерживаться либо вашего варианта, либо, необязательно, использования enumerate
при цикле:
for idx1, ai in enumerate(a):
for idx2, bj in enumerate(b):
z[idx1][idx2] = f(ai, bj)
Это имеет то преимущество, что вам не нужно жестко кодировать ваш range
(или xrange
) или использовать len(a)
в качестве ввода.Но в целом, если нет большой разницы в производительности 1 , используйте метод, который вы и другие, используя свой код, поймете легко.
1 Если вашa
и b
равны numpy.array
с, тогда будет существенная разница в производительности, поскольку numpy может обрабатывать массивы намного быстрее, если не требуется преобразований list
<-> numpy.array
.