Почему мои массивы меняют свое значение, если я не использую их в циклах? - PullRequest
0 голосов
/ 06 апреля 2020

Почему я получаю разные результаты от M1 и M2 после запуска циклов? Я не использую их. Моя цель - получить несколько массивов на основе M1 и M2. Я хочу заменить столбец-j из M1 в столбце-j из M2, чтобы создать массив-j и сохранить его в списке.

import numpy 
factores= ['V1','V2','V3','V4']
mean_values = numpy.array([5,5,25,1])

#Uncertainty index 
unc=5 #Measured in percentage
ub2=ub1=mean_values*(1+unc/100)  # 5% up mean
lb2=lb1=mean_values*(1-unc/100)  # 5% below mean
#Dimensions
nd=len(lb1) #determines number of variables considered in sensitivity analysis
np=5     #sample size
x=(numpy.random.rand(np,nd))
one =numpy.ones(np)
sample1 = (1+2*(x-1)*(unc/100)) # The % moved between plus or minus the unc%
M1 = sample1*mean_values # sample 1
y=(numpy.random.rand(np,nd))
sample2 = 1+2*(y-1)*(unc/100) # The % moved between plus or minus the unc%
M2 = (sample2*mean_values) # sample 2
z=(numpy.random.rand(np,nd))
sample3 = 1+2*(z-1)*(unc/100) # The % moved between plus or minus the unc%
M3 = sample3*mean_values # sample 3
lista_N=[]
lista_NTj=[]
NTj=numpy.zeros((np,nd))
matriz_1=M1[:,:]
matriz_2=M2[:,:]

print(M1==M2)
for j in range(nd):
    Nj=numpy.zeros((np,nd))
    Nj=matriz_2
    Nj[:,j]=matriz_2[:,j]
    lista_N.append(Nj) 

for i in range(nd):
    NTj=matriz_1
    NTj[:,i]=matriz_2[:,i]
    lista_NTj.append(NTj)  

print(M1==M2)

1 Ответ

0 голосов
/ 06 апреля 2020

добро пожаловать в Stack Overflow.

На самом деле вы не используете M1 и M2 напрямую, но ваши matriz_1 и matriz_2 по существу связывают новые имена с M1 и M2, другими словами, они все еще ссылаются на одну и ту же базовую матрицу.

Таким образом, любые изменения в matriz_1 и matriz_2 также изменят M1 и M2.

Чтобы получить желаемое поведение (где M1 и M2 не изменяется до и после for l oop), просто добавьте .copy() при объявлении новых массивов matriz_1 и matriz_2:

matriz_1=M1[:,:].copy()
matriz_2=M2[:,:].copy()

Таким образом, вы создают несвязанные копии matriz_1 и matriz_2, и любые изменения в них не влияют на M1 и M2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...