Numpy 数组操作

1.修改数组形状

1)ndarray.reshape
在不改变数据的条件下修改形状
numpy.reshape(arr, newshape, order='C')

import numpy as np
a= np.array([1,2,3,4])
print(a)# [1 2 3 4]
b= a.reshape([2,2])
print(b)
# [[1 2]
#  [3 4]]
2)ndarray.flat

        数组的一维迭代器,支持索引、遍历等操作

import numpy as np
arr= np.array([[1,2,3],[4,5,6]])
print(arr.flat[0])#1
print(arr.flat[5])#6
for x in arr.flat:
    print(x,end=' ')#1 2 3 4 5 6 
3)ndarray.flatten
返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
ndarray.flatten(order='C')
order( 可选 ) 'C' -- 按行, 'F' -- 按列, 'A' -- 原顺序, 'K' -- 元素在内存中的出现顺序。
如果将order参数设置为'C',则表示数组以行优先的方式进行展平。如果设置为F',则数组以列优先的方式进行展平。只有当数组在内存中是Fortran连续的,并且将order参数设置为'A'时,数组才会以列优先的方式进行展平。最后一种方式是K,它以元素在内存中出现的顺序展平数组,默认情况下,该参数设置为'C'。
返回值为展平的一维数组
import numpy as np
arr= np.array([[1,2,3],[4,5,6]])
print(arr)
# [[1 2 3]
#  [4 5 6]]
print(arr.flatten())# [1 2 3 4 5 6]
print(arr.flatten("C"))# [1 2 3 4 5 6]
print(arr.flatten("F"))# [1 4 2 5 3 6]
4)ndarray.ravel
numpy.ravel() 展平的数组元素 ( 扁平化 ),返回的是数组视图,修改会影响原始数组
ndarray.ravel(a, order='C')
order( 可选 ) 'C' -- 按行, 'F' -- 按列, 'A' -- 原顺序, 'K' -- 元素在内存中的出现顺序。
import numpy as np
arr= np.array([[1,2,3],[4,5,6]])
print(arr)
# [[1 2 3]
#  [4 5 6]]
print(arr.ravel())# [1 2 3 4 5 6]
print(arr.ravel("C"))# [1 2 3 4 5 6]
print(arr.ravel("F"))# [1 4 2 5 3 6]

ravel函数完成展平的操作。返回数组的一个视图
flatten函数完成展平的操作,与ravel函数的功能相同。但是,flatten函数会请求分配内存来保存结果


ravel只是改变了原数组的视图(显示方式),本质还是原数组(内存地址是一致的),因此在ravel的基础上进行改动,会影响到原有的数组,而flatten则是在原数组的基础上复制了一个副本出来,和原数组之间无联系,所以改动fatten的内容,不会影响到原数组的效果

2.翻转数组

1)numpy.transpose
用于对换数组的维度
numpy.transpose(arr, axes)
axes :整数列表,对应维度,通常所有维度都会对换。
import numpy as np
arr= np.arange(24).reshape(2,3,4)
print(arr.shape)#(2, 3, 4)
print(arr.T.shape)#(4, 3, 2)
print(np.transpose(arr).shape)#axes为默认值时,相当于print(arr.T.shape),此时打印的值为(4, 3, 2)
print(np.transpose(arr,[1,0,2]).shape)#(3, 2, 4)
#设置axes的值时,以此例来讲,默认值为0,1,2维,可自行设置相关维度的对换
#若axes:[2,0,1],则打印出来的值为(4,2,3)

2)ndarray.T
实现的功能为将n行m列的数组转置为m行n列的数组
import numpy as np
arr= np.arange(10).reshape(2,5)
print(arr)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
print(arr.T)
# [[0 5]
#  [1 6]
#  [2 7]
#  [3 8]
#  [4 9]]

# 即2行5列转置为5行2列

3.连接数组

numpy.concatenate

沿指定轴连接相同形状的两个或多个数组,此函数可以在水平或垂直方向上操作

        numpy.concatenate((a1, a2, ...), axis)

a1, a2, ... :相同类型的数组,可以简单的理解为a1,a2数组第一个数组前的中括号个数需一样
axis :沿着它连接数组的轴,默认为 0

        axis就是轴的意思

一维数组拥有一个轴:axis=0;

二维数组拥有两个轴:axis=0,axis=1;

三维数组拥有三个轴:axis=0,axis=1,axis=2。

import numpy as np
a1=np.array([[1,2],[3,4]])
a2=np.array([[5,6]])
print(np.concatenate((a1,a2)))
# [[1 2]
#  [3 4]
#  [5 6]]
print(np.concatenate((a1,a2),0))
# [[1 2]
#  [3 4]
#  [5 6]]
print(np.concatenate((a1,a2),None))#[1 2 3 4 5 6]

# print(np.concatenate((a1,a2),1))
#会报错
# 使用此函数要求除了连接轴以外的所有输入数组维度都必须完全匹配,
# 但是沿着维度0,索引0处的数组大小为2,索引1处的数组大小为1

print("--------------")
a11=np.array([[1,2],[3,4],[5,6]])
a22=np.array([[7,8],[2,3],[3,4]])
print(np.concatenate((a11,a22)).shape)#(6, 2)
print(np.concatenate((a11,a22),1).shape)#(3, 4)

4.分割数组

1)numpy.split
numpy.split(ary, indices_or_sections, axis)

indices_or_sections :如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

axis 0 时在水平方向分割, axis 1 时在垂直方向分割,默认axis为0
1表示横轴,方向从左到右;0表示纵轴,方向从上到下。 即axis=1为横向,axis=0为纵向,而不是行和列,具体到各种用法而言也是如此。
import numpy as np
arr=np.arange(24).reshape(4,6)
print(np.split(arr,2))
# [array([[ 0,  1,  2,  3,  4,  5],
#        [ 6,  7,  8,  9, 10, 11]]), array([[12, 13, 14, 15, 16, 17],
#        [18, 19, 20, 21, 22, 23]])]
print(np.split(arr,2,1))
# [array([[ 0,  1,  2],
#        [ 6,  7,  8],
#        [12, 13, 14],
#        [18, 19, 20]]), array([[ 3,  4,  5],
#        [ 9, 10, 11],
#        [15, 16, 17],
#        [21, 22, 23]])]
print(np.split(arr,[1,3]))
# [array([[0, 1, 2, 3, 4, 5]]), array([[ 6,  7,  8,  9, 10, 11],
#        [12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23]])]
2)numpy.hsplit

水平分割        相当于进行split分割,axis 1

3)numpy.vsplit

垂直分割        相当于进行split分割,axis  0

import numpy as np
arr=np.arange(16).reshape(4,4)
print(np.hsplit(arr,2))
# [array([[ 0,  1],
#        [ 4,  5],
#        [ 8,  9],
#        [12, 13]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11],
#        [14, 15]])]
print(np.vsplit(arr,2))
# [array([[0, 1, 2, 3],
#        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
#         [12, 13, 14, 15]])]

你可能感兴趣的:(numpy)