用了那么久的Numpy,才开始真正会用ndarray对象

Numpy库的ndarray对象

一、numpy的ndarray对象

numpy最重要的一个特点是其

维数组对象ndarray,它是一个一系列同类型数据的集合,以0下标开始进行集合中元素的索引

创建一个ndarray只需要调用Numpy的array函数即可:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

参数说明:

参数说明
object数组或者嵌套的数列
dtype数组元素的类型
copy对象是否需要复制,可选
order创建数组样式,C为行方向,F为列方向,A为任意方向
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

测试:

a = np.array([1,2,3,4])  #一维
b = np.array([[1,2],[3,4],[5,6]])  # 二维
print(a)
print(b)

输出:

[1 2 3 4]
[[1 2]
 [3 4]
 [5 6]]

关于参数ndmin

# 参数ndmin
a1 = np.array([1,2,3], ndmin=1)
a2 = np.array([1,2,3], ndmin=2)
a3 = np.array([1,2,3], ndmin=3)
print(a1)
print(a2)
print(a3)

结果:

[1 2 3]
[[1 2 3]]
[[[1 2 3]]]

二、Numpy创建数组

1.调用numpy.empty(shape, dtype, order)方法

注意:order有两个值,C和F分别代表行优先和列优先

numpy.empty([3,2], dtype = int)
# 方式1:numpy.empty()
a4 = np.empty([3,2], dtype = int)    #[3,2]代表三行两列,即是有三个元素的二维数组
print(a4)

结果:并未进行初始化,随机输出的数值

[[       28090704               0]
 [       27547584 140697935844848]
 [140697954999808 140697982180144]]
2.numpy.zeros()

创建方式和empty()一样,知识创建指定大小数组后的元素用0填充

# 方式2:numpy.zeros()
a5 = np.zeros([3,2], dtype = int)
print(a5)

结果:

[[0 0]
 [0 0]
 [0 0]]
3.numpy.ones()
# 方式3:numpy.ones()
a6 = np.ones([3,2], dtype=int)
print(a6)

结果:

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

4.numpy.asarray(),从已有的数组创建
# 方式4:numpy.asarray(),从已有的数组创建
array = [1,2,3]
a7 = np.asarray(array, dtype=float)
print(a7)

结果:

[ 1.  2.  3.]
5.numpy.frombuffer:用于动态数组实现
# 方式5:numpy.frombuffer:用于动态数组实现
# 参数说明:count--》每次读取的个数,-1代表全部数据,offset--》开始索引
a8 = np.frombuffer(b"hello world", dtype='S1', count=1, offset=0)
print(a8)

结果:

[b'h']
6.numpy.fromiter:从迭代器中建立
# 方式6:numpy.fromiter:从迭代器中建立
it = iter(array)
a9 = np.fromiter(it, dtype=float, count=-1)
print(a9)

结果:

[ 1.  2.  3.]
7.numpy.arange()
# 方式7:numpy.arange()
a0 = np.arange(10,20,2)
print(a0)

结果:

[10 12 14 16 18]

三、Numpy切片和索引

举个栗子

s = slice(2,7,2)  #[2 4 6]
b1 = np.arange(10)  #[0 1 2 3 4 5 6 7 8 9]
print(b1[s])  # [2 4 6]

b1[s]:这种写法类似于b1为待切片的数组,s为切片的索引,按照s的索引去取出b1的数值

1.冒号的使用’:’
# :的使用
print(b1[1:])
print(b1[1:2])
print(b1[:3])

结果:
[1 2 3 4 5 6 7 8 9]

[1]

[0 1 2]

冒号类似于数组的切片操作

思考:如果是二维或者三维数组呢?

2.多维数组中冒号的使用
# 多维数组冒号:的使用
b2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(b2[1:])
print(b2[1:2])
print(b2[:2])

# 结果
[[4 5 6]
 [7 8 9]]

[[4 5 6]]

[[1 2 3]
 [4 5 6]]

在多维数组中,是一样的道理,将最外层的按切片拿出

3.省略号的使用…

思考:上面使用:切片可以拿出外层的数据,如果对于一个二维数据,想要拿出内部数据怎么办

比如:b2 = [[1,2,3], [4,5,6],[7,8,9]],想要拿出[8,9]

print(b2[2][1:])

# 结果
[8,9]

如果想要拿出[2,3],[5,6],[8,9]呢

使用上面的切片:能不能实现呢

print(b2[:,1:])

#结果
[[2 3]
 [5 6]
 [8 9]]

除此之外,还可以使用省略[6 7 8 9]号…

如果对于行来说需要所有的行,就可以使用省略号…代替" : "

print(b2[...,1:])

#结果
[[2 3]
 [5 6]
 [8 9]]

同样,如果只想要第二行的数据,就可以在列上使用省略号

print(b2[1,...])

# 结果
[4 5 6]
4.整数数组索引
print(b[[0,1,2],[0,1,0]])

结果:
[1 5 7]

整数数组索引是将同样位置的索引组合起来去切分,比如对于b2 = [[1,2,3], [4,5,6],[7,8,9]],按照整数索引[[0,1,2],[0,1,0]]切分,就是把b2的[[0,0],[1,1],[2,0]]的数值取出来

5.布尔索引
# 布尔索引
print(b2[b2>5])

# 结果
[6 7 8 9]

将b2>5的数值筛选出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧码文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值