numpy数组与list的转换、切片与深(浅)拷贝

list转np.array:

  1. List元素是一维array的情况:
a = np.array([1,2])
b = np.array([5,6,7])
c = [a,b]
d = np.array(c)

转换成功:
numpy数组与list的转换、切片与深(浅)拷贝_第1张图片
2. List元素是二维array的情况:

a = np.array([[1,2],[3,4]])
b = np.array([[5,6,7],[8,9,10]])
c = [a,b]
d = np.array(c)

由于a、b数组的shape分别为(2,2)、(2,3),因此会报错ValueError: could not broadcast input array from shape(2,2) into shape (2).此时有两种方法解决:1. 展开数组;2. 利用mask统一shape ,参考:https://blog.csdn.net/sinat_29957455/article/details/103487477

数组切片与深(浅)拷贝


a = np.zeros(2)
b = np.ones(3)

print(a)            # [0. 0.]				a
print(id(a))        # 140671659430096		a地址

print(b)            # [1. 1. 1.]			b
print(id(b))        # 140671659430576		b地址

a[:] = b[:2]		#						切片并赋值(a、b都切片)
print(a)            # [1. 1.]				
print(id(a))        # 140671659430096		a地址未变
a[0] = 0			#						改变a中元素的值
print(a)            # [0. 1.]
print(b)            # [1. 1. 1.]			b未改变,因为切片为深拷贝

a = b[:2]			#						切片并赋值(a未切片)				
print(a)            # [1. 1.]				
print(id(a))        # 140671658719152		a有了新的地址
a[0] = 0			#						改变a中元素的值
print(a)            # [0. 1.]				
print(b)            # [0. 1. 1.]			b中元素值随之改变

a = b				#						直接赋值 浅拷贝
print(a)            # [0. 1. 1.]
print(id(a))        # 140671659430576		
a[0] = 1
print(a)            # [1. 1. 1.]
print(b)            # [1. 1. 1.]

你可能感兴趣的:(python,numpy,numpy,python)