numpy 学习笔记(一)

numpy 学习

安装 pip install numpy

导入numpy库,并查看numpy版本

import numpy as np
np.__version__
'1.21.6'

一、创建ndarray

ndarray N d=dimension array数组 N维数组

arr = [[1, 2, 3], [2, 3, 4]]
arr[1][2] # 获取2行3列位置的数, 下标从0开始
4
arr = [i for i in range(100000)]
arr.__sizeof__() # __sizeof__是python提供的魔术方法, 可以查看对象的占用内存
824440

扩展; 单下划线, 双下划线开头, 双下划线开头和双下划线结尾的变量有什么区别?
单下划线, 一般是用来表示私有的属性或方法
双下划线开头的属性是python内置的属性. 一般不推荐你自己的代码以双下划线开头.
双下划线开头, 双下划线结尾的是python内置的魔术方法或属性.

class A:
    _a = 123

1. 使用np.array()由python list创建

arr = [1, 2, 3, 4]
n = np.array(arr)
n
array([1, 2, 3, 4])
# 把一个ndarray变回列表
n.tolist()
[1, 2, 3, 4]
arr = [1, 2, 3, 4.0, '5']
n = np.array(arr)
n
array(['1', '2', '3', '4.0', '5'], dtype='<U32')
n.dtype # dtype('<U32') 数据类型为Unicode字符串,并且最大长度为32个字符
dtype('<U32')

注意:

  • numpy默认ndarray的所有元素的类型是相同的
  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

2. np的routines函数

1. np.ones(shape, dtype=None, order=‘C’)

创建一个由指定形状的数组,其中的所有元素均为 1

np.ones(shape=(3, 4), dtype=np.int32) # 创建一个形状为 (3, 4) 的数组,其中所有元素为 1
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
2. np.zeros(shape, dtype=float, order=‘C’)

创建一个由指定形状的数组,其中的所有元素均为 0

np.zeros(shape=(1, 2, 3), dtype=np.int32)
array([[[0, 0, 0],
        [0, 0, 0]]])
3. np.full(shape, fill_value, dtype=None, order=‘C’)

创建一个由指定形状的数组,元素为指定fill_value值

np.full(shape=(3, 4, 2), fill_value=8.0)
array([[[8., 8.],
        [8., 8.],
        [8., 8.],
        [8., 8.]],

       [[8., 8.],
        [8., 8.],
        [8., 8.],
        [8., 8.]],

       [[8., 8.],
        [8., 8.],
        [8., 8.],
        [8., 8.]]])
4. np.eye(N, M=None, k=0, dtype=float)

对角线为1其他的位置为0

生成2维, 对角线上全是1, 其他位置全是0的矩阵.
k=0表示主对角线.
行列数相同的矩阵, 叫做方阵
主对角线上全是1, 其他位置全是0的方阵, 叫做单位矩阵.
如果一个矩阵可以变成单位矩阵, 那么我们把这个矩阵叫做满秩矩阵.

np.eye(6, k=-1)
array([[0., 0., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.]])
5. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

在指定的范围内生成等间隔的数字序列

# 线段等分
np.linspace(0, 10, num=10, endpoint=False, retstep=True)
(array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]), 1.0)
6. np.arange([start, ]stop, [step, ]dtype=None)

在指定的范围内生成一个等差数列

range(10)
range(0, 10)
# 和python中的range是一样
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# start=0, end, step
# 在使用np.arange的时候,步长step尽量是整数, 如果是小数的话, 那么使用np.linspace会好一点. 
np.arange(0, 10, 0.3333)
array([0.    , 0.3333, 0.6666, 0.9999, 1.3332, 1.6665, 1.9998, 2.3331,
       2.6664, 2.9997, 3.333 , 3.6663, 3.9996, 4.3329, 4.6662, 4.9995,
       5.3328, 5.6661, 5.9994, 6.3327, 6.666 , 6.9993, 7.3326, 7.6659,
       7.9992, 8.3325, 8.6658, 8.9991, 9.3324, 9.6657, 9.999 ])
7. np.random.randint(low, high=None, size=None, dtype=‘l’)

生成指定范围内的随机整数

import random
random.randint(0, 10)
5
# 对应python中random.randint几乎一样, 都表示随机整数, 但是python的random.randint是全闭. 
# numpy中random.randint是左闭右开的. 
np.random.randint(0, 10, size=(4, 5))
array([[7, 9, 8, 9, 5],
       [1, 7, 7, 4, 6],
       [0, 3, 5, 4, 6],
       [9, 9, 9, 1, 5]])
8. np.random.randn(d0, d1, …, dn)

标准正太分布

# 均值是0, 标准偏差是1的正态分布叫做标准正态分布. 
np.random.randn(2, 3)
array([[-0.75926381, -0.62395974,  0.64699105],
       [-0.72714531,  0.60406202, -0.44077902]])
9. np.random.normal(loc=0.0, scale=1.0, size=None)

生成符合正态分布(高斯分布)的随机数

# 正态分布.也叫高斯分布
n = np.random.normal(loc=10, scale=3, size=(1000, 1000))
n.std()
3.0010820776451492
10. np.random.random(size=None)

生成0到1的随机数,左闭右开

np.random.random(size=(2, 3))
array([[0.70609928, 0.98551644, 0.11949883],
       [0.93846752, 0.8489868 , 0.2842577 ]])
11. np.random.rand(d0, d1, d2, d3…,dn)
# 和np.random.random一样
np.random.rand(2, 3)
array([[0.60377638, 0.43412141, 0.93043316],
       [0.6709193 , 0.49076209, 0.75783597]])

二、ndarray的属性

4个重要属性:
ndim:维度
shape:形状(各维度的长度)
size:总长度
dtype:元素类型

n = np.random.randint(0, 10, size=(3, 5))
n
array([[7, 4, 2, 8, 1],
       [1, 2, 0, 0, 6],
       [1, 9, 9, 7, 0]])
# 返回ndarray的维度
n.ndim # n dimension 即维度
2
n.shape # 各维度的长度
(3, 5)
# 总元素个数
n.size
15
# dtype=data type 数据类型
n.dtype
dtype('int32')
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值