数组的操作

Numpy中包含了一些函数用于操作数组,大致分为六类:修改数组形状,反转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除

1,修改数据形状 (数组重塑)

  • reshape():不改变数据的条件下修改数组形状

  • flatten():返回一份数组复制,对复制数组所做的修改不会影响原数组

  • ravel():返回展开数组(即,展开为一维数组)

(1)reshape()函数,格式如下:

numpy.reshape(arr,newshape,order='C')

  • arr:要修改形状的数组

  • newshape:新形状参数,为整数或者整数数组,新的形状应当兼容原有的形状

  • order: 'C'按行,'F'按列,'A'按原顺序,'k'元素在内存中的出现顺序

2

import numpy as np
a = np.arange(12).reshape(2,6)
b = a.reshape(3,4)
c = a.reshape(3,4,order = "F")
d = a.reshape(3,4,order = "A")
print('a=',"\n",a)
print('b=','\n',b)
print('c=','\n',c)
print('d=','\n',d)

# 输出
a= 
 [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
b= 
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
c= 
 [[ 0  7  3 10]
 [ 6  2  9  5]
 [ 1  8  4 11]]
d= 
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

3

import numpy as np
a = np.arange(12).reshape(2,6)
a1 = a.reshape(3,4)
a2 = a.reshape(3,4,order="F")  
a3 = a.reshape(3,4,order='A')
a4 = a.reshape(3,4,order="C")
a,a1,a2,a3,a4
# 输出
(array([[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11]]),
 array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]),
 array([[ 0,  7,  3, 10],
        [ 6,  2,  9,  5],
        [ 1,  8,  4, 11]]),
 array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]),
 array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]))
shape,reshape的区别

10

import numpy as np
arr1 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr1.reshape(3,4)  # 不改变原数组
arr1
# 输出
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

9

arr1.shape = (4,3) # 改变原数组
arr1
# 输出
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
(2)flatten()函数,格式如下:

ndarray.flatten(order='C')

注意:修改返会的数组不会对原数据产生影响

(3)ravel()函数,格式如下:

np.ravel(a,order='C')

  • 作用:展平的数组元素并拷贝一份,顺序通常是“C风格”,返回的时数组视图

  • 两者区别:flatten()不会影响原始数组;ravel会影响原始数组。参数order()都与reshape()函数相同。

  • flatten()函数与ravel()函数的区别在于 返回复制还时视图,numpy.flatten()返回一份复制,对复制所做的修改不会影响原数组,二numpy.ravel()函数返回的是视图,对视图修改会影响原数组

4

b = np.arange(25).reshape(5,5)
b1 = b.flatten(order='C')   # C是默认的
b2 = b.flatten(order='F')
b,b1,b2,type(b1)
# 输出
(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, 24]]),
 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, 24]),
 array([ 0,  5, 10, 15, 20,  1,  6, 11, 16, 21,  2,  7, 12, 17, 22,  3,  8,
        13, 18, 23,  4,  9, 14, 19, 24]),
 numpy.ndarray)

5

b2[0] = 100  # 只是b2的值变了,b中的值不变
b2,b
# 输出
(array([100,   5,  10,  15,  20,   1,   6,  11,  16,  21,   2,   7,  12,
         17,  22,   3,   8,  13,  18,  23,   4,   9,  14,  19,  24]),
 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, 24]]))

6

b3 = b.ravel(order="C")
b4 = b.ravel(order="F")
b3,b4,type(b3),type(b4)
# 输出
(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, 24]),
 array([ 0,  5, 10, 15, 20,  1,  6, 11, 16, 21,  2,  7, 12, 17, 22,  3,  8,
        13, 18, 23,  4,  9, 14, 19, 24]),
 numpy.ndarray,
 numpy.ndarray)

7

b3[0]=10  # b和b3的值都变了
b3,b
# 输出
(array([10,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
        17, 18, 19, 20, 21, 22, 23, 24]),
 array([[10,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24]]))

32

b4
# 输出b4 
array([100,   5,  10,  15,  20, 100,   6,  11,  16,  21, 100,   7,  12,
        17,  22, 100,   8,  13,  18,  23, 100,   9,  14,  19,  24])

a = np.arange(12).reshape(3,4)
a1 = a.flatten()
a,a1
# 输出a,a1
(array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]),
 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值