python3 Numpy 基础 (三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38125866/article/details/82669357

形状改变

  • 可以使用各种命令更改阵列的形状。请注意,以下三个命令都返回已修改的数组,但不更改原始数组。
In [109]: a = np.floor(10*np.random.random((3,4)))

In [110]: a
Out[110]: 
array([[5., 5., 8., 7.],
       [5., 0., 9., 0.],
       [7., 4., 6., 5.]])

In [111]: a.ravel()
Out[111]: array([5., 5., 8., 7., 5., 0., 9., 0., 7., 4., 6., 5.])

In [112]: a.reshape(6,2)
Out[112]: 
array([[5., 5.],
       [8., 7.],
       [5., 0.],
       [9., 0.],
       [7., 4.],
       [6., 5.]])

In [113]: a.T
Out[113]: 
array([[5., 5., 7.],
       [5., 0., 4.],
       [8., 9., 6.],
       [7., 0., 5.]])

In [114]: a.T.shape
Out[114]: (4, 3)

In [115]: a.shape
Out[115]: (3, 4)
  • 几个阵列可以沿不同的轴堆叠在一起:,
In [119]: a = np.array([1,2,3])

In [120]: a
Out[120]: array([1, 2, 3])

In [121]: b = np.array([4,5,6])

In [122]: b
Out[122]: array([4, 5, 6])

In [123]: np.vstack((a,b))
Out[123]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [124]: np.hstack((a,b))
Out[124]: array([1, 2, 3, 4, 5, 6])
  • 使用时hsplit,可以沿着水平轴分割数组,方法是指定要返回的形状相同的数组的数量,或者指定应该进行除法的列:
In [125]: a = np.floor(10*np.random.random((2,12)))

In [126]: a
Out[126]: 
array([[9., 8., 4., 4., 6., 7., 5., 0., 2., 2., 7., 4.],
       [5., 6., 4., 5., 4., 3., 9., 8., 1., 3., 9., 8.]])

In [127]: np.hsplit(a,3)
Out[127]: 
[array([[9., 8., 4., 4.],
        [5., 6., 4., 5.]]), array([[6., 7., 5., 0.],
        [4., 3., 9., 8.]]), array([[2., 2., 7., 4.],
        [1., 3., 9., 8.]])]

In [128]: np.hsplit(a,(3,4))
Out[128]: 
[array([[9., 8., 4.],
        [5., 6., 4.]]), array([[4.],
        [5.]]), array([[6., 7., 5., 0., 2., 2., 7., 4.],
        [4., 3., 9., 8., 1., 3., 9., 8.]])]

副本和视图

  • 简单分配不会复制数组对象或其数据。
In [138]: a = np.arange(6)

In [139]: b = a

In [140]: b is a
Out[140]: True

In [141]: b.shape = 2,3

In [142]: a.shape
Out[142]: (2, 3)
  • Python将可变对象作为引用传递,因此函数调用不会复制。
In [146]: def f(x):
     ...:     print(id(x))
     ...:     

In [147]: a = np.arange(6)

In [148]: id(a)
Out[148]: 140069411015376

In [149]: f(a)
140069411015376
  • 不同的数组对象可以共享相同的数据。该view方法创建一个查看相同数据的新数组对象。

In [150]: c = a.view()

In [151]: c is a
Out[151]: False

In [152]: c.flags.owndata
Out[152]: False

In [153]: c.shape = 2,3

In [154]: a.shape
Out[154]: (6,)
  • copy方法生成数组及其数据的完整副本。
In [171]: a = np.arange(6)

In [172]: d = a.copy()

In [173]: d is a
Out[173]: False

In [174]: d.base is a
Out[174]: False

In [175]: d[0] = 123

In [176]: a
Out[176]: array([0, 1, 2, 3, 4, 5])

猜你喜欢

转载自blog.csdn.net/weixin_38125866/article/details/82669357