Numpy二维数组每次执行代码时都会改变值



我正在使用python和numpy手动解决一些电力系统问题,我遇到的一个问题是交换列和行。但是每次我执行代码时,它在不同的位置都有不同的值。

这是我的代码:

Y = 
0.00-10.00j        -0.00+10.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j
-0.00+10.00j        24.63-71.51j        -8.21+20.52j       -16.42+41.04j          0.00+0.00j          0.00+0.00j
0.00+0.00j        -8.21+20.52j        24.63-69.51j          0.00+0.00j         -0.00+8.00j          0.00+0.00j
0.00+0.00j       -16.42+41.04j          0.00+0.00j        24.63-61.51j        -8.21+20.52j          0.00+0.00j
0.00+0.00j          0.00+0.00j         -0.00+8.00j        -8.21+20.52j        24.63-61.51j          0.00+0.00j
0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00-8.00j
Ya = np.copy(Y) # Y is the 2D array above
print('n'.join([''.join(['{:20.2f}'.format(item) for item in row]) 
for row in Ya]))
print('n')
Ya[[1, 3]] = Ya[[3, 1]]
Ya[[2, 4]] = Ya[[4, 2]]
Ya[[3, 4]] = Ya[[4, 3]]
Ya[[3, 5]] = Ya[[5, 3]]
Ya[: ,[1, 3]] = Ya[:, [3, 1]]
Ya[:, [2, 4]] = Ya[:, [4, 2]]
Ya[:, [3, 4]] = Ya[:, [4, 3]]
Ya[:, [3, 5]] = Ya[:, [5, 3]]
print('n'.join([''.join(['{:20.2f}'.format(item) for item in row]) 
for row in np.array(Ya)]))
print('n')
# Reduced Matrix
temp1 = np.copy(Ya[0:4, 0:4])
temp2 = np.copy(Ya[0:4, 4:])
temp3 = np.copy(Ya[4:, 0:4])
temp4 = np.copy(Ya[4:, 4:])
Y_r = temp1 - (temp2 * (np.matrix(temp4).getI()) * temp3)
print('n'.join([''.join(['{:20.2f}'.format(item) for item in row]) 
for row in np.array(Y_r)]))

正如你所看到的,我打印了Ya几次,只是为了检查是否一切正常。但是,即使在第一个Ya打印中,每次运行代码时它都会改变值。

我不知道它是否与此有关,但我正在Google Colab上运行它。上面代码的第一行位于与其他代码不同的单元格中,我在其中创建了y。

如果您每次执行时都获得不同的值,我认为这一定与您的环境有关。我复制了你的代码,并做了一些轻微的改变,只是为了测试,每次我运行它,我得到相同的输出:

import numpy as np
Y = np.array([[0.00-10.00j, -0.00+10.00j, 0.00+0.00j, 0.00+0.00j, 0.00+0.00j, 0.00+0.00j],
[-0.00+10.00j, 24.63-71.51j, -8.21+20.52j, -16.42+41.04j, 0.00+0.00j, 0.00+0.00j],
[0.00+0.00j, -8.21+20.52j, 24.63-69.51j, 0.00+0.00j, -0.00+8.00j, 0.00+0.00j],
[0.00+0.00j, -16.42+41.04j, 0.00+0.00j, 24.63-61.51j, -8.21+20.52j, 0.00+0.00j],
[0.00+0.00j, 0.00+0.00j, -0.00+8.00j, -8.21+20.52j, 24.63-61.51j, 0.00+0.00j],
[0.00+0.00j, 0.00+0.00j, 0.00+0.00j, 0.00+0.00j, 0.00+0.00j, 0.00-8.00j]])
Ya = np.copy(Y)
def print_mat(mat):
print('n'.join([''.join(['{:20.2f}'.format(item) for item in row]) for row in mat]))
print_mat(Ya)
print('n')
Ya[[1, 3]] = Ya[[3, 1]]
Ya[[2, 4]] = Ya[[4, 2]]
Ya[[3, 4]] = Ya[[4, 3]]
Ya[[3, 5]] = Ya[[5, 3]]
print_mat(Ya)

总是给我这样的输出:

0.00-10.00j         0.00+10.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j
0.00+10.00j        24.63-71.51j        -8.21+20.52j       -16.42+41.04j          0.00+0.00j          0.00+0.00j
0.00+0.00j        -8.21+20.52j        24.63-69.51j          0.00+0.00j          0.00+8.00j          0.00+0.00j
0.00+0.00j       -16.42+41.04j          0.00+0.00j        24.63-61.51j        -8.21+20.52j          0.00+0.00j
0.00+0.00j          0.00+0.00j          0.00+8.00j        -8.21+20.52j        24.63-61.51j          0.00+0.00j
0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00-8.00j

0.00-10.00j         0.00+10.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j
0.00+0.00j       -16.42+41.04j          0.00+0.00j        24.63-61.51j        -8.21+20.52j          0.00+0.00j
0.00+0.00j          0.00+0.00j          0.00+8.00j        -8.21+20.52j        24.63-61.51j          0.00+0.00j
0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00+0.00j          0.00-8.00j
0.00+10.00j        24.63-71.51j        -8.21+20.52j       -16.42+41.04j          0.00+0.00j          0.00+0.00j
0.00+0.00j        -8.21+20.52j        24.63-69.51j          0.00+0.00j          0.00+8.00j          0.00+0.00j

我在你的代码中没有看到任何其他语句不应该每次都以相同的方式运行。如果可能的话,我建议你试着在一个你有更多控制的环境中运行。