python-numpy库 学习笔记二 ndarray数组的创建、维度变换、类型变换、向列表转换

5 篇文章 0 订阅
5 篇文章 0 订阅

ndarray数组的创建方法

1、从python中的列表,元组等类型创建ndarray数组

X=np.array(list/tuple)
X=np.array(list/tuple,dtype=np.float32)
当np.array()不指定dtype时,numpy将根据数据情况关联一个dtype的类型

  • 从列表类型创建数组
import numpy as np
x = [0, 1, 2, 3, 6]
a=np.array(x)
print(a)
[0 1 2 3 6]
  • 从元组创建数组
import numpy as np 
y = (4, 5, 6, 8, 5)
a=np.array(y)
print(a)
[4 5 6 8 5]
  • 从列表和元组混合创建数组
import numpy as np
x = [0, 1, 2, 3, 6]
y = (4, 5, 6, 8, 5)
a=np.array([x,y])
print(a)
[[0 1 2 3 6]
 [4 5 6 8 5]]

2、使用numpy中的函数创建ndarray数组()

  • np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
import numpy as np
a=np.arange(10)
print(a)
[0 1 2 3 4 5 6 7 8 9]
  • np.ones(shape) 根据shape生成一个全是1的数组,shape是元组类型
import numpy as np
a=np.ones((2, 3))
print(a)
[[1. 1. 1.]
 [1. 1. 1.]]
import numpy as np
a=np.ones((2, 3),dtype=np.int32)   #元素类型为int32
print(a)
[[1 1 1]
 [1 1 1]]
  • np.zeros(shape) 根据shape生成一个全是0的数组,shape是元组类型
import numpy as np
a=np.zeros((3, 3))
print(a)
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
  • np.full(shape,val) 根据shape生成一个数组,每个元素值都是val
import numpy as np
a=np.full((3, 3),5)
print(a)
[[5 5 5]
 [5 5 5]
 [5 5 5]]
import numpy as np
a=np.full((3,2,5),7)
print(a)
[[[7 7 7 7 7]
  [7 7 7 7 7]]

 [[7 7 7 7 7]
  [7 7 7 7 7]]

 [[7 7 7 7 7]
  [7 7 7 7 7]]]
print(a.shape)
(3, 2, 5)
  • np.eye(n) 创建一个正方形的n*n单位矩阵,对角线为1其余为0
import numpy as np
a=np.eye(4)
print(a)
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
  • np.ones_like(a) 根据数组a的形状生成一个全是1的数组

  • np.zeros_like(a) 根据数组a的形状生成一个全是0的数组

  • np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val

import numpy as np
a=np.full((3,5),7)
print(a)
[[7 7 7 7 7]
 [7 7 7 7 7]
 [7 7 7 7 7]]
like1=np.ones_like(a)
print(like1)
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
like2=np.zeros_like(a)
print(like2)
[[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
like3=np.full_like(a,3)
print(like3)
[[3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]]
  • np.linspace() 根据起止数据等间距地填充数据,形成数组
  • np.concatenate() 将两个或多个数组合并成一个新的数组
import numpy as np
a=np.linspace(0,10,5)   #0到10之间平均填充5个数
print(a)
[ 0.   2.5  5.   7.5 10. ]
b=np.linspace(5,20,5)
print(b)
[ 5.    8.75 12.5  16.25 20.  ]
c=np.concatenate((a,b))
print(c)
[ 0.    2.5   5.    7.5  10.    5.    8.75 12.5  16.25 20.  ]

ndarray数组的维度变换

方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数据,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数据n个维度进行调换
.flatten() 对数组进行将维,返回折叠后的一维数组,原数组不变

import numpy as np
a=np.ones((2,3,4),dtype=np.int32)
print(a)
[[[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]

 [[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]]
b=a.reshape(4,6)   #原数组没有改变,改变形状后的数组赋值到b
print(b)
[[1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]]
print(a)    # 原数组没有改变
[[[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]

 [[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]]
c=a.resize(3,8)       #改变了原数组的形状,改变后的数组没有赋值到c
print(a)             #原来的数组被改变了
[[1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]]
print(c)               #数组c没有被赋值,还是空的
None


import numpy as np
a=np.ones((2,2,3),dtype=np.int32)
print(a)                #原数组
[[[1 1 1]
  [1 1 1]]

 [[1 1 1]
  [1 1 1]]]
b=a.flatten()         #被折叠后赋值给b
print(b)                #被折叠成一个一维数组,元素个数不变
[1 1 1 1 1 1 1 1 1 1 1 1]
print(a)                #原数组没有被改变
[[[1 1 1]
  [1 1 1]]

 [[1 1 1]
  [1 1 1]]]

ndarray数组的类型变换

new_a=a.astype(new_type)
astype()方法一定会创建新的数组(将原始数据的一个拷贝),即使两个类型一致。

import numpy as np
a=np.ones((3,4),dtype=np.int)
print(a)        #原数组 整数
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
b=a.astype(np.float)        #将数组元素的类型改变为浮点型
print(b)                #改变类型后的数组赋值到b
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
print(a)                #元数组a的类型没有被改变
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

ndarray数组向列表的转换

ls=a.tolist()
import numpy as np
x1=np.array([1, 2, 3])
x2=x1+3
x3=x1+6
a=np.array((x1,x2,x3))
print(a)        #原数组
[[1 2 3]
 [4 5 6]
 [7 8 9]]
b=a.tolist()           #将数组转化为列表
print(b)                #转化后的赋值给b
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(a)                #原数组没有发生改变
[[1 2 3]
 [4 5 6]
 [7 8 9]]
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值