Numpy:array的创建和ndarray的基本操作

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

Numpy
导入:import numpy as np

1.创建数组
一维数组的创建 
arr1=np.array([1,2,3,4,5],float)

二维数组的创建 
arr2=np.array([[1,2,3],[3,4,5],[1,5,8]])

注意: 
如果传进来的列表中包含不同的类型,则统一为统一类型,str>float>int

2.使用np的routines函数创建
np.ones([3,3]) 
输出结果: 
array([[ 1., 1., 1.], 
[ 1., 1., 1.], 
[ 1., 1., 1.]])

np.full([3,3],3.14) 
输出结果: 
array([[ 3.14, 3.14, 3.14], 
[ 3.14, 3.14, 3.14], 
[ 3.14, 3.14, 3.14]])

np.eye(4) 
eye()返回一个对角线为1的矩阵 
输出结果: 
array([[ 1., 0., 0., 0.], 
[ 0., 1., 0., 0.], 
[ 0., 0., 1., 0.], 
[ 0., 0., 0., 1.]])

等差数列(此处num=5) 
np.linspace(0,10,5) 
输出结果: 
array([ 0. , 2.5, 5. , 7.5, 10. ])

等差数列(此处step=2) 
np.arange(0,10,2) 
输出结果: 
array([0, 2, 4, 6, 8])

随机整数 
np.random.randint(0,10,5) 
输出结果: 
array([0, 7, 2, 3, 7])

np.random.seed(100)#随机的种子,有了种子,每次都一样 
np.random.randn(10) 
输出结果: 
array([ 0.37332715, -0.2887605 , 0.04985088, -0.93815832, -0.4087037 , 
1.13352254, 0.52713526, -0.76014192, -0.97292788, 0.16290446])

random.random()默认0-1,左开右闭 
np.random.seed(3)#时间种子,将时间固定,产生固定不变的随机数 
np.random.random(size=[2,2]) 
输出结果: 
array([[0.5507979 , 0.70814782], 
[0.29090474, 0.51082761]])

3.ndarray的属性
4个必记参数:

ndim:维度
shape:形状
size:总长度
dtype:元素类型
注意:dtype返回数组元素的类型,type()函数返回数组类型

4.索引
一维与列表完全一致 多维时同理

arr=np.random.randint(10,50,size=(3,4))
arr
a
array([[19, 46, 25, 10],
   [38, 35, 39, 39],
   [18, 19, 10, 46]])
  arr[1][2]
  39
 
5.切片
用以上例子中的a: 
a[0:2] 获取前两行 
a[0:2,0:2] 获取前两行前两列 
a[:,0:2] 获取前两列 
a[::-1] 行倒序 
a[:,::-1] 列倒序 
a[::-1,::-1] 行、列全部倒序

6.变形
arr=np.random.randint(1,100,size=(100,))
1
将一个一维数组arr变成多维数组

arr.reshape((10,10)) #两个参数分别是新数组的行和列
1
将多维数组变成一维数组

a.reshape(12) #12是数组长度
1
arr.reshape(-1,10) 
-1:手动指定列数,自动计算行数

7.级联
np.concatenate() 级联需要注意的点:

级联的参数是列表:一定要加中括号
维度必须相同
形状相符
axis参数:0表示纵向级联,1表示横向级联;axis的范围由数组维度决定0-(维度-1)
np.hstack与np.vstack 水平级联与垂直级联

8.切分
np.spilt()
x = np.arange(1,10)
x

输出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

x1,x2,x3 = np.split(x,[3,5])
print(x1,x2,x3)
输出:
[1 2 3] [4 5] [6 7 8 9]
 
np.hsplit() 切分行

x = np.arange(16).reshape(4,4)
x
输出:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

print(np.hsplit(x,[2,3]))
输出:
[array([[ 0,  1],[ 4,  5], [ 8,  9], [12, 13]]),
         array([[ 2],  [ 6],  [10], [14]]), 
         array([[ 3],  [ 7],  [11],  [15]])]
 
np.vsplit () 切分列

x = np.arange(16).reshape(4,4)
x
输出:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
print(np.vsplit(x,[2,3]))
输出:
[array([[0, 1, 2, 3],
        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]
 
9.副本
所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效

a = np.array([1,2,3])
b=a
print(a,b)

输出:
[1 2 3] [1 2 3]

b[0]=2
a
输出:
array([2, 2, 3])
 
copy()函数可创建副本,对副本的操作,不会影响原来的对象

a = np.array([1,2,3])
b = a.copy()
b
输出:
[1,2,3]

b[0]=3
print(a,b)
输出:
[1 2 3] [3 2 3]
 
10.使用matplotlib.pyplot获取一个数组,数据来源于一张图片
import matplotlib.pyplot as plt
img=plt.imread('C:/Users/jiaxinyi/Desktop/a4coho1467042412050.jpg')
img.shape #得到的数组形状
输出:
(650,1200,3)
  

猜你喜欢

转载自blog.csdn.net/kwame211/article/details/87969982