Я обнаружил, что умножение списков элементов просто создает представление об элементах, застало меня врасплох.
>>> a=[0]*5
>>>a
[0,0,0,0,0]
>>>a[2] = 1
>>>a
[0,0,1,0,0]
>>>b = [np.ones(3)]*5
>>>b
[array([ 1., 1., 1.]), array([ 1., 1., 1.]), array([ 1., 1., 1.]), array([ 1., 1., 1.]), array([ 1., 1., 1.])]
>>>b[2][1] = 2
>>>b
[array([ 1., 2., 1.]), array([ 1., 2., 1.]), array([ 1., 2., 1.]), array([ 1., 2., 1.]), array([ 1., 2., 1.])]
Так что, если вы создадите список таких элементов и намереваетесь выполнять над ними различные операции, вы окажетесь в тупике ...
Простое решение состоит в том, чтобы итеративно создавать каждый из массивов (используя цикл for или понимание списка) или использовать массив более высокого измерения (где, например, каждый из этих одномерных массивов является строкой в вашем двумерном массиве, который обычно быстрее).