矩阵之间以 = 赋值会产生关联性,内存一样,一个矩阵中的元素的更改会导致赋值的矩阵相应元素自动更改;而以copy()方法 赋值则不会产生关联性,内存地址不一样;c=a.view()进行复制,相当于创建一个视图,a和c的内存位置一样,c的值改变a也会对应改变,但c结构变化,a不会变化

import numpy as np

a = np.arange(4)# [0, 1, 2, 3]

b = a
c = a

a[0] = 4 #更改第一个元素值
print(a) # [4, 1, 2, 3]
print(b) # [4, 1, 2, 3]
print(c) # [4, 1, 2, 3]
#同理改变b,c也会导致a相应改变


d = a.copy()
a[0] = 0
print(a) #[0,1,2,3]
print(d) #[4,1,2,3]


c = a.view()            # 将 a 复制给 c
print(c is a)          
print("c=",c)
c.shape = (2,6)             # 改变 c 的结构为2行6列,看 a 是否会变化
print("c.shape=",c.shape)
print ("a.shape=",a.shape)
c[0,4] = 1234             # 改变 矩阵c 第0行4列的值,看 a 的值是否会变化
print("c=",c)
print("a=",a)
print (id(a))    # 内存地址,2493855144416
print (id(b))   #  内存地址,2493855144416


#切片数组会返回一个视图
s = a[ : , 1:3]
s[:] = 10 #更改数组视图中的1、2列中的元素为10
print(a)
'''
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])
'''

 

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐