首页 > 其他分享 >numpy的基本使用

numpy的基本使用

时间:2022-08-23 22:33:31浏览次数:92  
标签:基本 arr print 数组 使用 np numpy ndarray axis

参考

1.Numpy介绍

Numpy全称为numberical python。

2.ndarray介绍

ndarray全称N-dimensional array,一个N维数组类型,相同类型元素的集合。ndarray比python中的原生列表运算效率高。

  1. 因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素。
  2. numpy内置了并行运算功能
import numpy as np
# 如果ndarray数组中的元素类型不一致,则转为string类型
arr = np.array([[123, "str"],[True, "hi"]])
# [['123' 'str']
#  ['True' 'hi']]
print(arr)  

3.ndarray的属性

  1. ndarray.shape:表示数组维度的元组
  2. ndarray.ndim:数组维数
  3. ndarray.size:数组中的元素数量
  4. ndarray.itemsize: 一个数组元素的长度(字节)
  5. ndarray.dtype:数组元素的类型

4.ndarray的数据类型

image.png

# 创建数组的时候指定数据类型
arr = np.array([[1,2,3],[4,5,6]], dtype=np.string_)
print(arr)
print(arr.dtype)#|S1

# 若不指定,整数默认int32,小数默认float64

5.ndarray的基本操作

  1. 生成0和1的数组
# 生成1的数组
np.ones(shape, dtype)
np.ones_like(a, dtype)
# 生成0的数组
np.zeros(shape, dtype)
# 参数a表示从哪个数组生成
np.zeros_like(a, dtype)


arr = np.ones([2,3])
# [[1. 1. 1.]
#  [1. 1. 1.]]
print(arr)
arr = np.zeros_like(arr)
#[[0. 0. 0.]
 # [0. 0. 0.]]
print(arr)
  1. 从现有数组中生成数组
    1. np.array(object, dtype)
    2. np.asarray(a, dtype)
arr1 = np.array([[1,2,3],[4,5,6]])
# 深拷贝
arr2 = np.array(arr1)
# 浅拷贝
arr3 = np.asarray(arr1)
  1. 生成固定范围的数组
    1. 创建等差数组,可以指定数量:np.linspace(start, stop, num, endpoint)
      1. start:序列的起始值
      2. stop:序列的终止值(不包括)
      3. num:要生成的等间隔样例数量,默认为50
      4. endpoint:序列中是否包含stop值,默认为ture
    arr = np.linspace(0,100,10,False)
    # [ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90.]
    print(arr)
    
    1. 创建等差数组,可以指定步长:np.arange(start,stop, step, dtype)
      1. step:步长默认为1
    arr = np.arange(0, 100, 30 )
    # [ 0 30 60 90]
    print(arr)
    
    1. 创建等比数列:np.logspace(start,stop, num)
      1. num:要生成的等比数列数量,默认为50
    arr = np.logspace(0, 2, 3)
    # [  1.  10. 100.]
    print(arr)
    
  2. 生成随机数组:使用np.random模块
    1. 正态分布的创建方式:
      1. np.random.randn(d0,d1,...,dn):从标准正态分布中返回一个或者多个样本值
      2. np.random.normal(loc=0.0, scale=1.0, size=None)
        1. loc:此概率分布的均值
        2. scale:此概率分布的标准差
        3. size:输出的shape,默认为None,只输出一个值。
      // 创建一个包含10个数据的均值为1.75,标准差为1的数组
      import numpy as np
      arr = np.random.normal(1.75, 1, 10)
      print(arr)
      
      1. np.random.standard_normal(size=None):返回指定形状的标准正态分布的数组。
      2. 示例:随机生成4支股票1周的交易日涨幅数据
      // 涨跌幅在某个正态分布内,比如均值0,方差1
      arr = np.random.normal(0, 1, (4,5))
      
    2. 均匀分布
      1. np.random.rand(d0, d1, ..., dn):返回[0.0,1.0)内的一组均匀分布的数。
      2. np.random.uniform(low=0.0, high=1.0, size=None):从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
        1. low:采样下界,float类型,默认值为0;
        2. high: 采样上界,float类型,默认值为1;
        3. size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m * n * k个样本,缺省时输出1个值。
      np.random.uniform(0, 100, size=(2,3))
      // array([[43.82112267,  7.37574185,44.33969076],
      // [44.68005159, 99.35521923, 29.22186739]])
      
      1. np.random.randint(low, high=None, size=None, dtype='l'):从一个均匀分布中随机采样,生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
      import numpy as np
      np.random.randint(0, 100, size=10)
      // array([66, 26, 94, 15,  6, 81, 14, 85, 94, 78])
      np.random.randint(0, 100, size=(2,3))
      // array([[12, 24, 49],
      // [17, 60, 68]])
      
5.数组的索引和切片
  1. 二维数组的切片:先进行行索引,再进行列索引
    image.png
// 测试数据如上图所示
// 获取前两行,前四列的数据
print(arr[0:2, 0:4])
  1. 三维数组的切片
    image.png
// 测试数据如上图所示
print(arr[0, 0, 1]) // 2
print(arr[1,0,2]) // 9
6.形状的修改
  1. ndarray.reshape(shape, order):返回一个具有相同数据域,但是形状不一样的视图。(行和列不进行互换)
    image.png
  2. ndarray.resize(new_shape):将会修改数组本身的形状,前提保持元素个数相同。(行和列不进行互换)
    image.png
  3. ndarray.T:数组的转置,将数组的行和列进行转置。
    image.png
7.类型修改
  1. ndarray.astype(type):返回修改了类型之后的数组
    image.png
  2. ndarray.tostring([order])或者ndarray.tobytes([order]):转换成字节
    image.png
8.数组的去重
  1. np.unique()
    image.png

6.ndarray基本运算

1.逻辑运算
import numpy as np

arr = np.random.randint(40, 100, (3, 5))
print(arr)
#逻辑判断,如果元素大于60就标记为True,否则为False
print(arr > 60)
#将满足条件的元素设置为指定的值
arr[arr >= 60] = 1
print(arr)

image.png

2.通用判断函数
  1. np.all()
  2. np.any()
import numpy as np

# 三名同学五门成绩
arr = np.random.randint(40, 100, (3, 5))
print(arr)
# 判断前两名同学的成绩是否全大于80分的
res = np.all(arr[0:2,:] > 80)
print(res) #False
# 判断前两名同学的成绩是否有大于90分的
res = np.any(arr[0:2,:] > 90)
print(res) #True

image.png

3.函数np.where(三元运算符)
# 1.判断前四名同学前四门课程中,成绩中大于60的置为1,否则为0
# 五名同学五门成绩
score = np.random.randint(40, 100, (5, 5))
print(score)
temp = score[0:4, 0:4]
np.where(temp > 60, 1, 0)

image.png

4.np.logical_and(三元运算符)
5.np.logical_or(三元运算符)
# 1.判断前四名学生,前四门课程中,
#成绩中大于60且小于90的换为1,否则为0

# 五名同学五门成绩
score = np.random.randint(40, 100, (5, 5))
print(score)
temp = score[0:4, 0:4]
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)

# 2.判断前四名学生,前四门课程中,
#成绩中大于90或小于60的换为1,否则为0

np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

image.png

6.统计运算
  1. 统计指标
min(a, axis)
Return the minimum of an array or minimum along an axis.
max(a, axis])
Return the maximum of an array or maximum along an axis.
# 中位数
median(a, axis)
Compute the median along the specified axis.
# 平均值
mean(a, axis, dtype)
Compute the arithmetic mean along the specified axis.
# 标准差
std(a, axis, dtype)
Compute the standard deviation along the specified axis.
# 方差
var(a, axis, dtype)
Compute the variance along the specified axis.
  1. 示例
# axis取0代表列, axis取1代表行去进行统计

# 六名同学五门成绩
score = np.random.randint(40, 100, (6, 5))
print(score)
print("各科成绩的最大分:{}".format(np.max(score, axis=1)))
print("各科成绩的最小分:{}".format(np.min(score, axis=1)))
print("各科成绩的波动情况:{}".format(np.std(score, axis=1)))
print("各科成绩的平均分:{}".format(np.mean(score, axis=1)))
print("各科成绩最高分对应的学生下标:{}".format(np.argmax(score, axis=0)))

image.png

7.数组间的运算
  1. 数组与数之间的运算
    image.png
  2. 数组与数组的运算
    1. 数组的广播机制:数组在进行矢量化运算时,要求数组的形状相等。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。
    2. 数组广播机制的条件:维度相等或者shape对应位置为1
    3. 示例
      image.png

7.矩阵

1.numpy中创建矩阵
  1. 使用array函数
a = np.array([[1,2,3],[4,5,6]])
print(type(a)) #<class 'numpy.ndarray'>
  1. 使用matrix函数
b = np.matrix([[1,0,0],[0,1,0]])
print(type(b)) #<class 'numpy.matrix'>
2.矩阵乘法API
  1. np.matmul():函数名为matrix multiplication的缩写
  2. np.dot()
    12的区别:二者都是矩阵乘法。np.matmul中禁止矩阵与标量的乘法。在矢量乘矢量的內积运算中,np.matmul与np.dot没有区别。
    image.png
3.矩阵扁平化

扁平化就是将矩阵转换为一维numpy数组。

4.方阵的特征值和特征向量

使用numpy库的linalg包的eig函数

5.方阵的逆矩阵

使用numpy库的linalg包的inv函数

6.方阵的行列式

使用numpy库的linalg包的det函数

7.方阵的迹

使用ndarray对象的trace()方法

8.矩阵的转置
  1. 使用transpose函数或者方法
  2. T属性

标签:基本,arr,print,数组,使用,np,numpy,ndarray,axis
From: https://www.cnblogs.com/wenzhihua/p/16618099.html

相关文章