Energies[:,a]+=dos_site(a,spd)
Это добавляет (затем назначает) массив с одним d (возвращаемый dos_site
) к столбцу a'th
>>> a = np.zeros([5, 6])
>>> a[:,0] += np.arange(5)
>>> a
array([[0., 0., 0., 0., 0., 0.],
[1., 0., 0., 0., 0., 0.],
[2., 0., 0., 0., 0., 0.],
[3., 0., 0., 0., 0., 0.],
[4., 0., 0., 0., 0., 0.]])
>>> a[:,0] += np.arange(5)
>>> a
array([[0., 0., 0., 0., 0., 0.],
[2., 0., 0., 0., 0., 0.],
[4., 0., 0., 0., 0., 0.],
[6., 0., 0., 0., 0., 0.],
[8., 0., 0., 0., 0., 0.]])
>>> a[:,1] += np.arange(5)
>>> a
array([[0., 0., 0., 0., 0., 0.],
[2., 1., 0., 0., 0., 0.],
[4., 2., 0., 0., 0., 0.],
[6., 3., 0., 0., 0., 0.],
[8., 4., 0., 0., 0., 0.]])
Использование np.newaxis
разрешает широковещание .
>>> x = np.array([1,2,3,4])
>>> y = np.array([3,1,6,2])
>>> x[:,np.newaxis]*y
array([[ 3, 1, 6, 2],
[ 6, 2, 12, 4],
[ 9, 3, 18, 6],
[12, 4, 24, 8]])
В этом примере np.newaxis
добавляет другое измерение, в результате чего получается форма (4,1)
>>> x
array([1, 2, 3, 4])
>>> x[:,np.newaxis]
array([[1],
[2],
[3],
[4]])
Массив y
умножается на каждый элемент в x
, создавая двумерный массив.
[[1 * y],
[2 * y],
[3 * y],
[4 * y]]
Вещание массива в Numpy