Когда вы создаете cvector
, используя [np.zeros([6, 3])]*2
, вы не создаете 2 np.array
. Второй экземпляр - просто вид первого. Итак, cvector[0] = cvector[1]
. Таким образом, в цикле вы перезаписываете вычисления i=0
, когда делаете это снова для i=1
.
Вместо этого вы можете создать два независимых массива, например:
cvector = [np.zeros([6, 3]), np.zeros([6, 3])]
и работает как положено:
(0, 0, array([ 0. , -0.57735027, 0.81649658]))
(0, 1, array([-0.5 , -0.28867513, -0.81649658]))
(0, 2, array([-0.5 , -0.8660254, 0. ]))
(0, 3, array([ 0.5 , -0.28867513, -0.81649658]))
(0, 4, array([-0.5 , 0.8660254, 0. ]))
(0, 5, array([1., 0., 0.]))
(1, 0, array([-0.5 , -0.28867513, -0.81649658]))
(1, 1, array([ 0. , 0.57735027, -0.81649658]))
(1, 2, array([-0.5 , -0.8660254, 0. ]))
(1, 3, array([-0.5 , 0.28867513, 0.81649658]))
(1, 4, array([ 1., 0., -0.]))
(1, 5, array([-0.5 , 0.8660254, 0. ]))
[array([[ 0. , -0.57735027, 0.81649658],
[-0.5 , -0.28867513, -0.81649658],
[-0.5 , -0.8660254 , 0. ],
[ 0.5 , -0.28867513, -0.81649658],
[-0.5 , 0.8660254 , 0. ],
[ 1. , 0. , 0. ]]),
array([[-0.5 , -0.28867513, -0.81649658],
[ 0. , 0.57735027, -0.81649658],
[-0.5 , -0.8660254 , 0. ],
[-0.5 , 0.28867513, 0.81649658],
[ 1. , 0. , -0. ],
[-0.5 , 0.8660254 , 0. ]])]
Рассмотрим этот пример, чтобы показать, почему первый массив перезаписывается:
In [1]: import numpy as np
In [2]: cvector = [np.zeros([6, 3])]*2
In [3]: cvector
Out[3]:
[array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]),
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])]
In [4]: cvector[0][0] = (1, 2, 3)
In [5]: cvector
Out[5]:
[array([[1., 2., 3.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]),
array([[1., 2., 3.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])]
Обратите внимание, как первый элемент перезаписывается в обоих случаях.