numpy学习笔记1-基础

NumPy数组操作详解
本文详细介绍了NumPy库中数组的各种操作方法,包括数组的创建、索引、切片、展平、形状调整、组合与分割等。同时,还讲解了如何通过不同函数获取数组的属性,以及如何进行数组之间的转换。

import numpy as np
import datetime

# In[18]:
b = np.arange(24).reshape(2,3,4)
# In[19]:
b
# Out[19]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
# In[20]:
b[0,:,-1]
# Out[20]
array([ 3,  7, 11])
# In[21]:
b[0,::-1,-1]

# Out[21]:
array([11,  7,  3])

# In[22]:
b[0,:-1,-1]

# Out[22]:
array([3, 7])

# In[23]:
b[0,::,1]

# Out[23]:
array([1, 5, 9])

# In[24]:
b[0,::-1,1]

# Out[24]:
array([9, 5, 1])

# In[25]:
b[::-1]

# Out[25]:
array([[[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]],

       [[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]])

将数组展平操作-- ravel,flatten

# In[26]:
b
# Out[27]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

# In[27]:

#ravel返回的是视图
b.ravel()
# Out[27]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

# In[28]:

#flatten会请求分配内存
b.flatten()
# Out[28]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

# In[29]:

#用元组设置维度
b.shape = (6,4)

# In[30]:

b
# Out[30]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

# In[31]:

b.transpose()
# Out[31]:
array([[ 0,  4,  8, 12, 16, 20],
       [ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23]])

# In[32]:

b
# Out[32]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

# In[33]:

#resize()与reshape()功能一样,但前者会直接修改数组
b.resize((4,6))

# In[34]:

b
# Out[34]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

# In[35]:
b.reshape((2,3,4))
# Out[35]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

# In[36]:
b
# Out[36]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
# In[37]:
a = np.arange(9).reshape(3,3)

# In[38]:
a
# Out[38]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

# In[39]:
b = 2*a

# In[40]:

b
# Out[40]:
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

# In[41]:

#水平组合 -- hstack
np.hstack((a,b))
# Out[41]:
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

# In[42]:

#concatenate函数可实现同样的效果
np.concatenate((a,b),axis=1)
# Out[42]:
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

# In[43]:

#垂直组合 -- vstack
np.vstack((a,b))
# Out[43]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

# In[44]:

#concatenate函数可实现同样的效果
np.concatenate((a,b),axis=0)
# Out[44]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

# In[45]:

#深度组合 -- dstack
np.dstack((a,b))
# Out[45]:
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],

       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],

       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])

# In[46]:

#列组合 -- column_stack
#对于二位数组,column_stack与hstack效果一样
oned = np.arange(2)
twice_oned = 2*oned
np.column_stack((oned,twice_oned))
# Out[46]:
array([[0, 0],
       [1, 2]])

# In[47]:

#行组合 -- row_stack
#对于二位数组,row_stack与vstack效果一样
np.row_stack((oned,twice_oned))
# Out[47]:
array([[0, 1],
       [0, 2]])
# In[48]:

a
# Out[48]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

# In[49]:

#水平分割 -- hsplit
np.hsplit(a,3)
# Out[49]:
[array([[0],
        [3],
        [6]]), array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]])]

# In[50]:

#可同样使用split
np.split(a,3,axis=1)
# Out[50]:
[array([[0],
        [3],
        [6]]), array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]])]

# In[51]:

#垂直分割 -- vsplit
np.vsplit(a,3)
# Out[51]:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

# In[52]:

np.split(a,3,axis=0)
# Out[52]:
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

# In[53]:

#深度分割 -- dsplit函数按照深度方向进行分割
c = np.arange(27).reshape(3,3,3)
print c
np.dsplit(c,3)
# Out[53]:
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]

[array([[[ 0],
         [ 3],
         [ 6]],
 
        [[ 9],
         [12],
         [15]],
 
        [[18],
         [21],
         [24]]]), array([[[ 1],
         [ 4],
         [ 7]],
 
        [[10],
         [13],
         [16]],
 
        [[19],
         [22],
         [25]]]), array([[[ 2],
         [ 5],
         [ 8]],
 
        [[11],
         [14],
         [17]],
 
        [[20],
         [23],
         [26]]])]

数组的属性

# In[54]:
b
# Out[54]:
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

# In[55]:
#ndim 给出数组的维数
b.ndim
# Out[55]:
2

# In[56]:
#size 给出数组元素的总数
b.size
# Out[56]:
9

# In[57]:
#itemsize,给出数组中元素在内存中所占字节数
b.itemsize
# Out[57]:
4

# In[58]:
#nbytes 整个数组所占的存储空间 是itemsize与size的乘积
b.nbytes
# Out[58]:
36

# In[59]:
#flat 将返回一个numpy.flatiter对象
b = np.arange(4).reshape(2,2)
f = b.flat

# In[60]:
[i for i in f]
# Out[60]:
[0, 1, 2, 3]

数组转换

# In[61]:
#tolist 将数组转换为列表
b
# Out[61]:
array([[0, 1],
       [2, 3]])

# In[62]:
b.tolist()
# Out[62]:
[[0, 1], [2, 3]]

# In[63]:
#astype 转换过程中指定数据类型
b.astype(float)
# Out[63]:
array([[ 0.,  1.],
       [ 2.,  3.]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值