python之Numpy

news2024/11/14 20:46:55
  1. ndarray数组对象

    NumPy定义了一个n维数组对象,简称ndarray对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块
    ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列(行或列).

    1.1 ndarray基本数据类型

在这里插入图片描述

1.2 numpy.array()创建数组

格式:

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

参数说明:

参数参数说明
object表示要传入一个数组序列,传入参数可以是:列表\元组\ndarray数组\迭代对象\生成器,当传入序列有不同类型的元素时,将保留存储空间最大的类型
dtype可选参数,通过它更改数组的数据类型
copy可选参数,当数据源是ndarray是,表示数组是被能被复制,默认是True
order可选参数,以哪种内存布局创建你数组,有3个可选值:C(行序列)/F(列序列)/A(任意方向,默认)
ndmin可选参数,指定数组的纬度
subok可选参数,类型为bool,默认为Fasle.当为False时,使用ndarray数组的数据类型;为True时,使用obeject内部数据类型

代码示例:

   # subok参数
   import numpy as np
   # 创建一个矩阵
   a = np.mat([1,2,3,4])
   print(type(a))#<class 'numpy.matrix'>
   # 如果既要复制一份副本又要保持原类型,那么subk  = True
   b = np.array(a,subok=True)
   c = np.array(c,subok=False)#默认
   print(type(b),type(c))#<class 'numpy.matrix'> <class 'numpy.ndarray'>

1.3 numpy.empty()创建未初始化数组

创建指定形状的数组,元素随机填充
格式:

np.empty(shape,dtype =float,order =“C”)

示例代码:

   import numpy as np
   a = np.empty((3,3),dtype='int')
   print(a)
   """
   [[1 2 3]
    [4 5 6]
    [0 0 0]] 
   """

注意:
− 数组元素为随机值,因为它们未初始化

1.4 numpy.zeros() 创建0填充的指定大小的数组

创建指定形状的数组,数组元素以0填充
格式:

np.zeros(shape,dtype=float,order =“C”)

1.5 numpy.ones() 创建1填充的指定大小的数组

创建指定形状的数组,数组元素以 1 来填充
格式:

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

1.6 numpy.asarray()

numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。   

格式:

np.asarray(a,dtype=None,order=None)

注意:

  • 跟array类似,参数a可以是任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组

1.7 numpy.arange()用区间创建数组

格式:

numpy.arange(start,stop,step,dtype)

代码示例:

   import numpy as np
   a = np.arange(1,11,dtype=float)
   print(a)
   b = np.arange(3.1)
   print(b)
   c = np.arange(20,3)
   print(c)

Tip:
如何防止float不精确影响numpy.arange,代码案列:
ceil((stop-start)/step),确定项目数,小浮点不精确(stop = .400000001)可以向列表中添加意外值。

    import numpy as np
    a = np.arange(.1,.4,.1)
    print(a)#按理说应该是[0.1,0.2,0.3],但实际打印的确实[0.1 0.2 0.3 0.4]

因为浮点数在转换为二进制进行运算的时候会产生误差

1.8 numpy.linsapce()创建等差数列

返回在区间[start,stop]内num个均匀间隔的样本.数组是一个等差数列.

格式:

np.linespace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)\

参数描述:

参数功能描述
start必填项,序列起始下标
stop必填项,序列终止下标,如果endpoint为True时,包含末尾的stop
num生成等步长的样本数量,默认值是50
endpoint默认为True,为True时,包含末尾的stop.反之,则不包含
retstep默认为False,为True时会显示生成的数组元素的间距,反之,则不显示
dtypendarray的数据类型

代码示例:

    import numpy as np 
    a = np.linspace(1,50)
    print(a)
    b = np.linspace(1,50,retstep=True)
    print(b)

1.9 numpy.logspace 生成等比数列

返回在区间[start,stop]上计算的num个均匀间隔的样本.数据是一个等比数列构成.
格式:

np.logspace(start,stop,num = 50,endpoint =True,base = 10.0,dtype = None)

参数描述:

参数功能描述
start必填项,序列起始下标
stop必填项,序列终止下标,如果endpoint为True时,包含末尾的stop
num生成等步长的样本数量,默认值是50
endpoint默认为True,为True时,包含末尾的stop.反之,则不包含
retstep默认为False,为True时会显示生成的数组元素的间距,反之,则不显示
base对数log的底数
dtypendarray的数据类型

参数解释:

np.logspace(A,B,C,base = D)

注:

  • A:生成数组的起始值为D的A次方
  • B:生成数组的结束值为D的B次方
  • C:总共生成C个数
  • D:指数型数组的底数为D,当省略base=D时,默认底数为10
   import numpy as np
   a = np.logspace(1,10,10,base=2)
   print(a)#[   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]
   b = np.logspace(1,10,10)
   print(b)#[1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09 1.e+10]

1.5 ndarray数组的重要属性和方法

numpy中比较重要的ndarray数组对象属性有:

属性说明
ndarray.ndim数组的维度
ndarray.shape数组的形状,对于矩阵,m行n列
ndarray.size数组元素的总个数,相等于shape打印形状的(m,n)中的m*n
ndarray.dtypendarray数组对象的元素类似
ndarray.itemsizendarray数组对象中每个元素的大小,以字节为单位.例如,一个float64展64bit,每个字节长度为8,共占64/8=8字节
ndarray.flagsndarray对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray元素的虚部
ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

numpy中比较重要的ndarray数组对象方法有:

方法名作用
ndarray.reshape(new_shape)不改变原ndarray的基础上,返回调整形状之后的副本.注意,调整之后总个数要保持不变
ndarray.resize(a,new_shape)如果新数组大于原始数组,则新数组将填充a的重复副本,注意:ndarray.resize(new_shape),是用0填充,而不是用重复的a填充
ndarray.astype()numpy数据类型转换,调用astype返回数据类型修改后的数据,但是源数据的类型不会变

代码示例:

    import numpy as np
    a = np.array([1,2,.3,.5])
    print(a.dtype)#float64
    # 修改a的元素类型
    b = a.astype('float32')
    print(b.dtype)#float32
    print(b.astype('int64').dtype)#int64
  1. 切片和索引

    ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
    ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
    注意:
    数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改)。这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.copy())。
    格式:

    ndarray[start:stop:step(不被包含)]

注意:
切片还可以使用省略号’…',如果在行位置使用省略号,俺么返回值将包含所有行元素,反之则包含所有列元素

格式:

ndarray[…,列切片操作]/ndarray[行切片操作,…]
ndarray[…][行切片操作]

代码示例:
      a = np.array([
          [1,2,3,4],
          [2,3,4,5],
          [4,5,6,7]
      ],dtype='float')
      print(a)
      print(a[...,1])#[2. 3. 5.]
      print(a[...,1:])
      # [[2. 3. 4.]
      #  [3. 4. 5.]
      #  [5. 6. 7.]]
      print(a[...][1])#[2. 3. 4. 5.]

Tip:
为什么切片和区间会忽略最后一个元素?
计算机科学家edsger w.djkstra(艾兹格·W·迪科斯彻),delattr这一风格的解释应该是比较好的:
- 当只有最后一个位置信息时,我们可以快速看出切片和区间里有几个元素: range(3)和my_list[:3]
- 当起始位置信息都可见时,我们可以快速计算出切片和区间的长度,用有一个数减去第一个下表(stop-start)即可
- 这样做也让我们可以利用任意一个下标把序列分割成不重叠的两部分,只要写成my_list[x]和my_list[x:]就可以了。

除了常规的索引方式,NumPy 比一般的 Python 序列提供更多的索引方式。 除了之前看到的用整数和切片的索引外,数组可以由整数数组索引布尔索引花式索引.

2.1 整数数组索引

格式:

ndarray[[行索引],[列索引]] / ndarray[行切片,列切片]

注意:也可以索引跟切片混合使用

代码示例:获取(1,0),(2,1),(0,0)元素为例

	import numpy as np
    a = np.arange(16)
    b = a.reshape((4,4))
    # 获取四个角上的值
    print(b)
    print(b[[0,0,3,3],[0,3,0,3]])
    print(b[...,[0,0]])
    print(b[1:3,[0]])

2.2 布尔索引

当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。下面示例返回数组中大于6的的所有元素:
代码示例:

	import numpy as np
    import numpy as np
    a = np.arange(9)
    b = a.reshape((3,3))
    c = np.arange(start=9,stop=0,step=-1)
    d = c.reshape((3,3))
    
    print(b)
    print(b[b>6])
    print(d)
    print(b[b>d])
    
    #[[0 1 2]
    # [3 4 5]
    # [6 7 8]]
    #[7 8]
    #[[9 8 7]
    # [6 5 4]
    # [3 2 1]]
    #[5 6 7 8]

拓展:
布尔索引实现的是通过一维数组中的每个元素的布尔型数值对一个与一维数组有着同样行数或列数的矩阵进行符合匹配。这种作用,其实是把一维数组中布尔值为True的相应行或列给抽取了出来
(注意:一维数组的长度必须和想要切片的维度或轴的长度一致)。

2.3 花式索引

花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素,如果目标是二维数组,那么就是对应下标的行

代码示例:

	import numpy as np
    # 花式索引
    a = np.arange(9)
    print(a)
    print(a[[0,6]])
    
    b =a.reshape((3,3))
    print(b)
    print(b[[2,1,0]])
  1. 数组操作

3.1 numpy的广播机制(Broadcast)

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

但如果两个数组形状不同,那它们之间如何进行算数运算呢?
当运算中的 两 个数组的形状不同时,numpy 将自动触发广播机制。

这种机制 的核心是对形状较小的数组,在横向或者纵向上进行一定次数的重复,与其形状较大的数组拥有相同的纬度.

如下图所示,展示了数组a与数组b是如何利用广播机制兼容:

在这里插入图片描述

4*3 的二维数组a与长为 3 的一维数组b相加,等效于把b在二维上重复4次后,再进行运算.

广播机制的规则:

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加1补齐
  • 输出数组的形状是输入数组形状的各个维度上的最大值。
  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。
  • 当输入数组的某个维度的长度为1时,沿着此维度运算时都用此维度上的第一组值。

规则理解:

数组a大小为(2,1,3)
数组b大小为(4,1)
首先右对齐:
2 1 3
   4 1


3 跟 1 匹配,1 跟 4 匹配,此时就能做运算

从上面的就能看出:

  • 两个数组右对齐以后,对应纬度里的数值要么相等,要么为1
  • 此外就不能运算,下面这种就不能运算

数组a大小为(2,1,3)
数组b大小为(4,2)
首先右对齐:
2 1 3
   4 2


2 跟 3 不匹配,此时就不能做运算

3.2 迭代数组

NumPy 迭代对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。

格式:

i for i in np.nditer(ndarray,order = “C”)

代码示例:

    import numpy as np
    a = np.arange(0,60,5).reshape((3,4))
    print(a)

    print('以C顺序打印')
    for i in np.nditer(a,order='C'):
        print(i)
    print('以F顺序打印')
    for i in np.nditer(a,order='F'):
    print(i)

3.3 numpy的数组操作

Numpy中包含一些函数用于处理数组,大概可分为用一下几类:

  1. numpy常用函数

4.1 Numpy字符串函数

在这里插入图片描述

4.2 Numpy数字函数

NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。

4.2.1 三角函数

NumPy 提供了标准的三角函数:sin()、cos()、tan(),以及arcsin,arccos,和 arctan 函数返回给定角度的 sin,cos 和 tan 的反三角函数。

代码示例:

import numpy as np
 a = np.array([0,30,45,60,90])
 print('不同角度的正弦值:')
 # 通过乘pi/180转换为弧度
 print(np.sin(a*np.pi/180))
 print('数组角度的余弦值:')
 print(np.cos(a*np.pi/180))
 print('数组角度的正切值:')
 print(np.tan(a*np.pi/180))
4.2.2 舍入函数
  • numpy.around(ndarray,decimals = 0):返回指定数字的四舍五入值;decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
  • numpy.floor():返回小于或者等于指定表达式的最大整数,即向下取整
  • numpy.ceil():返回大于或者等于指定表达式的最小整数,即向上取整

代码演示:

import numpy as np
 a = np.array([1.0,5.55,123,0.5673,25.5342])
 print(a)
 print('四舍五入后:')
 print(np.around(a))
 print(np.around(a,decimals=1))
 print(np.around(a,decimals=-1))
 # 向上取整
 print(np.floor(a))
 # 向下取整
 print(np.ceil(a))

4.3 Numpy统计函数

NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 函数说明如下:

4.3.1 numpy.amin() 和 numpy.amax()

numpy.amin() 用于计算数组中的元素沿指定轴的最小值。
numpy.amax() 用于计算数组中的元素沿指定轴的最大值。
代码演示:

import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print(a)
print('调用amin()')
print(np.amin(a,0))
print('调用amax()')
print(np.amax(a))
print("再次调用amax()")
print(np.amax(a,axis=0))
4.3.1 numpy.percentile()

百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。
格式:

numpy.percentile(ndarray,q,axis)

参数说明:

参数名描述
ndarray输入数组
q要计算的百分位数,在 0 ~ 100 之间
axis沿着它计算百分位数的轴

首先明确百分位数:
第 p 个百分位数是这样一个值,它使得至少有 p% 的数据项小于或等于这个值,且至少有 (100-p)% 的数据项大于或等于这个值
举个例子:高等院校的入学考试成绩经常以百分位数的形式报告。比如,假设某个考生在入学考试中的语文部分的原始分数为 54 分。相对于参加同一考试的其他学生来说,他的成绩如何并不容易知道。但是如果原始分数54分恰好对应的是第70百分位数,我们就能知道大约70%的学生的考分比他低,而约30%的学生考分比他高。p=70

代码演示:

import numpy as np
 a = np.array([[10,7,4],[3,2,1]])
 print(a)
 print('调用percentile()函数:')
 # 注意:50%的分位数,就是在a里面排序之后的中位数
 print(np.percentile(a,50))
 # aixs为0 ,在纵列上求
 print(np.percentile(a,50,axis=0))
 # aixs为1 ,在横行上求
 print(np.percentile(a,50,axis=1))
 # 保持维度不变
 print(np.percentile(a,50,axis=1,keepdims=True))
 '''
 [[10  7  4]
  [ 3  2  1]]
 调用percentile()函数:
 3.5
 [6.5 4.5 2.5]
 [7. 2.]
 [[7.]
  [2.]]
 '''
4.3.2 numpy.median()

numpy.median(a, axis) 函数用于计算数组 a 中元素的中位数(中值)

4.3.3 numpy.mean()

numpy.mean(a, axis) 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。

4.3.4 numpy.average()

numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。
该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开。
加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。
例如:
数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。

import numpy as np
 a = np.array([1,2,3,4])
 print(a)#[1 2 3 4]
 # 不指定权重时相当于mean()函数
 print(np.average(a))#2.5
 # 当指定权重时才相当于加权平均数
 wts = np.array([4,3,2,1])
 print(np.average(a,weights=wts))#2.0
 # 加权平均值相当于
 print((1*4+2*3+3*2+4*1)/(4+3+2+1))#2.0
4.3.5 标准差numpy.std()

标准差是一组数据平均值分散程度的一种度量。 标准差是方差的算术平方根。
公式:

std = sqrt(mean((x - x.mean())**2))

代码:

import numpy as np
 print(np.std([1,2,3,4]))
4.3.6 方差numpy.var()

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。 换句话说,标准差是方差的平方根。
代码:

import numpy as np
 print (np.var([1,2,3,4]))
4.3.6 numpy.sort():函数返回输入数组的排序副本

格式:

numpy.sort(ndarray,axis,kind,order)

参数解释:

参数名作用
ndarray要排序的数组
axis沿着它排序数组的轴, axis=0 按列排序,axis=1 按行排序
kind默认为’quicksort’(快速排序)
order如果数组包含字段,则是要排序的字段

代码演示:

import numpy as np
 a = np.array([[3,7],[9,1]])
 print(a)
 # 按列排序
 print(np.sort(a,axis=0))
 # 按行排列
 print(np.sort(a,axis=1))
4.3.7 numpy.argsort()

numpy.argsort() 函数返回的是数组值从小到大的索引值。

4.3.8 numpy.argmax() 和 numpy.argmin()

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。

4.3.9 numpy.where():返回输入数组中满足给定条件的元素的索引

代码演示:

import numpy as np
 a = np.arange(9.).reshape(3,3)
 print(a)
 print('元素值大于3的索引:')
 b = np.where(a>3)
 print(b)
 print('使用这些索引来获取满足条件的元素:')
 print(a[b])
'''
[[0. 1. 2.]
  [3. 4. 5.]
  [6. 7. 8.]]
 元素值大于3的索引:
 (array([1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2], dtype=int64))
 使用这些索引来获取满足条件的元素:
 [4. 5. 6. 7. 8.]
'''
4.3.10 numpy.extract():根据某个条件从数组中抽取元素,返回满条件的元素

代码演示:

import numpy as np
 a = np.arange(9.).reshape(3,3)
 print(a)
 # 定义选择偶数元素的条件
 condition = np.mod(a,2) == 0
 print('每个元素是否符合的的条件值:')
 print(condition)
 print('使用条件提取元素:')
 print(np.extract(condition,a))
 '''
 [[0. 1. 2.]
  [3. 4. 5.]
  [6. 7. 8.]]
 每个元素是否符合的的条件值:
 [[ True False  True]
  [False  True False]
  [ True False  True]]
 使用条件提取元素:
 [0. 2. 4. 6. 8.]
 '''

4.4 Numpy副本与视图

副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置
视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置
视图一般发生在:
(1). numpy 的切片操作返回原数据的视图。
(2). 调用 ndarray 的 view() 函数产生一个视图。
副本一般发生在:
(1). Python 序列的切片操作,调用deepCopy()函数。
(2). 调用 ndarray 的 copy() 函数产生一个副本。
赋值操作:
简单的赋值不会创建数组对象的副本。 相反,它使用原始数组的相同id()来访问它。 id()返回 Python 对象的通用标识符,类似于 C 中的指针。
因此,一个数组的任何变化都反映在另一个数组上。 例如,一个数组的形状改变也会改变另一个数组的形状。
代码演示:

import numpy as np
a = np.arange(6)
print(a)
b = a
print('a:',id(a),'b:',id(b),sep='\n')
b.shape = 2,3
# b的形状改变了,a的形状也跟着改变了
print(a.shape)

4.4.1 视图或浅拷贝

ndarray.view() 方会创建一个新的数组对象,该方法创建的新数组的维数变化不会改变原始数据的维数。
代码演示:

import numpy as np
 a = np.arange(6).reshape(3,2)
 print(a)
 print('a的视图:')
 b = a.view()
 print(b)
 print(id(a),id(b))
 print('修改b的形状,a并不会被改变')
 b.shape = 2,3
 print(a.shape)
 print(b.shape)
 # [[0 1]
 #  [2 3]
 #  [4 5]]
 # a的视图:
 # [[0 1]
 #  [2 3]
 #  [4 5]]
 # 2068573437072 2068573432752
 # 修改b的形状,a并不会被改变
 # (3, 2)
 # (2, 3)

而使用切片创建视图修改数据会影响到原始数组,代码示例如下:

import numpy as np
 a = np.arange(12)
 print(a)#[ 0  1  2  3  4  5  6  7  8  9 10 11]
 print('创建切片:')#创建切片:
 a1 = a[3:]
 a2 = a[3:]
 a1[1] = 23
 a2[2] = 45
 print(a)#[ 0  1  2  3 23 45  6  7  8  9 10 11]
 print(id(a),id(a1),id(a2))#2068543592496 2068543596912 2068543596240

解释:
变量 a,b 都是 arr 的一部分视图,对视图的修改会直接反映到原数据中。但是我们观察 a,b 的 id,他们是不同的,也就是说,视图虽然指向原数据,但是他们和赋值引用还是有区别的。

4.4.2 副本或深拷贝

ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。
代码演示:

import numpy as np
 a = np.array([[10,10],[2,3],[7,8]])
 print(a)
 print('创建a的副本:')
 b = a.copy()
 print(b)
 # a 与 b 是完全不想关的,不能通过修改b来让a也被修改
 b[1,1] = 1000
 print('修改b之后:')
 print(b)
 print(a)
  1. numpy文件操作loadtxt

loadtxt读取txt文本,csv文件,返回从文件中读取的数组
格式:

loadtxt(fname,dtype=,coomments = “#”,delimiter = None,converters = None,skiprows =0,usercols =None,unpack = False,ndmin=0,encoding = ‘bytes’)

参数解释:

参数名作用
fname指定文件名称或路径.支持压缩文件,包括.gz.bz格式
dtype元素数据类型.默认float
comments表示注释字符集开始的标志,默认为#.参数类型为字符串或字符串组成的列表.
delimiter分隔符,字符串
converters字典.将特定列的数据转换为字典中对应函数的浮点型数据,默认为空.例如,将空值替换为0
skiprows跳过特定行数据,默认为0.例如,跳过可能是注释或标题的第一行
usecols用来指定要读取数据的列,默认为空.第一列为0,列如(1,3,5)
unpack指定是否转置数组,如果为True则转置,默认为Fasle
ndmin整数型.指定返回的数组至少包含特定的数组.值域为0\1\2,默认为0
encoding编码格式,确定文件是用utf-8还会gbk等

原数据中。但是我们观察 a,b 的 id,他们是不同的,也就是说,视图虽然指向原数据,但是他们和赋值引用还是有区别的。

4.4.2 副本或深拷贝

ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。
代码演示:

import numpy as np
 a = np.array([[10,10],[2,3],[7,8]])
 print(a)
 print('创建a的副本:')
 b = a.copy()
 print(b)
 # a 与 b 是完全不想关的,不能通过修改b来让a也被修改
 b[1,1] = 1000
 print('修改b之后:')
 print(b)
 print(a)
  1. numpy文件操作loadtxt

loadtxt读取txt文本,csv文件,返回从文件中读取的数组
格式:

loadtxt(fname,dtype=,coomments = “#”,delimiter = None,converters = None,skiprows =0,usercols =None,unpack = False,ndmin=0,encoding = ‘bytes’)

参数解释:

参数名作用
fname指定文件名称或路径.支持压缩文件,包括.gz.bz格式
dtype元素数据类型.默认float
comments表示注释字符集开始的标志,默认为#.参数类型为字符串或字符串组成的列表.
delimiter分隔符,字符串
converters字典.将特定列的数据转换为字典中对应函数的浮点型数据,默认为空.例如,将空值替换为0
skiprows跳过特定行数据,默认为0.例如,跳过可能是注释或标题的第一行
usecols用来指定要读取数据的列,默认为空.第一列为0,列如(1,3,5)
unpack指定是否转置数组,如果为True则转置,默认为Fasle
ndmin整数型.指定返回的数组至少包含特定的数组.值域为0\1\2,默认为0
encoding编码格式,确定文件是用utf-8还会gbk等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++笔记之虚函数重写规则、返回类型协变、函数的隐藏

C笔记之虚函数重写规则、返回类型协变、函数的隐藏 code review! 文章目录 C笔记之虚函数重写规则、返回类型协变、函数的隐藏1.返回类型协变2.C中函数的隐藏 —— C Primer Plus &#xff08;第6版&#xff09; —— cppreference 1.返回类型协变 2.C中函数的隐藏 在C中&a…

深入理解AQS和ReentrantLock

AQS 之前介绍synchronized关键字时提到过管程的概念&#xff0c;synchronized就是JVM内置管程&#xff0c;其使用的是管程的MESA模型。但是synchronized有一些缺点&#xff1a; 非公平锁&#xff0c;可能会使得一些线程长久抢占不到锁&#xff0c;导致其处于饥饿状态&#xf…

5.分布式事务管理-Seata

由于Transactional注解只能控制所在服务器A的事务&#xff0c;当方法中调用其他服务器B的方法&#xff0c;当A中该方法出错时&#xff0c;Transactional只能回滚A中该方法中的SQL&#xff0c;而A调用B的方法中的SQL无法回滚 1.Seata Seata&#xff08;分布式事务解决方案&…

Electron入门,项目运行,只需四步轻松搞定。

electron 简单介绍&#xff1a; 实现&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平台桌面应用。 electron 官方文档&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的&#xff0c;可行性真实有效。 文章1&#xff1a; https://www.cnbl…

Centos开启防火墙和端口命令

Centos开启防火墙和端口命令 1. 开启查看关闭firewalld服务状态2. 查看端口是否开放3. 新增开放端口4. 查看开放的端口 1. 开启查看关闭firewalld服务状态 #启动/关闭firewall systemctl start/stop firewalld #查看防火墙状态 systemctl status firewalld #禁用或者启用 syst…

sql in mac学习记录

鉴于有一段时间没有访问mysql了&#xff0c;最近打算在mac 系统上下载mysql 练习一下sql的使用&#xff0c;于是 First, the mysql download https://dev.mysql.com/downloads/mysql/ Second, Mysql install steps Install the software by normally install one software …

mysql 、sql server trigger 触发器

sql server mySQL create trigger 触发器名称 { before | after } [ insert | update | delete ] on 表名 for each row 触发器执行的语句块## 表名&#xff1a; 表示触发器监控的对象 ## before | after : 表示触发的时间&#xff0c;before : 表示在事件之前触发&am…

cloud_mall-notes02

1、多条件分页查询page ApiOperation("多条件分页查询xxxx")GetMapping("page")PreAuthorize("hasAuthority(模块权限:权限:page)")public ResponseEntity<Page<实体类>> loadxxxxPage(Page<实体类> page,实体类 domain) {pag…

磁盘满了解决办法

磁盘满了解决办法 1.添加硬盘2.查看是否添加成功3.创建分区4.查看卷名5.扩容6.7.8. 1.添加硬盘 2.查看是否添加成功 lsblk注&#xff1a;若没有&#xff0c;需要partprobe刷新或者重启 3.创建分区 fdisk /dev/sdb4.查看卷名 vgdisplay5.扩容 vgextend centos /dev/sdb16. …

Docker安装MySQL、Redis如何自启?

1、问题&#xff1a; Docker自启&#xff1a;http://t.csdn.cn/L2v55 重新启动虚拟机&#xff0c;Docker自动启动之后&#xff0c;发现MySQL、Redis都没有启动。 docker ps 没查到有启动的容器。 docker ps -a 查看所有的容器。 2、先使用 su root 命令&#xff0c;切换到root…

朴实无华的数据增强然后训练一下应用在电网异物检测领域,好像有自己的数据集就能发文了

RCNN-based foreign object detection for securing power transmission lines (RCNN4SPTL) Abstract 本文提出了一种新的深度学习网络——RCNN4SPTL (RCNN -based Foreign Object Detection for Securing Power Transmission lines)&#xff0c;该网络适用于检测输电线路上的…

一个炫酷的头像悬停效果 2

基于上次翻译的 &#x1f525;&#x1f525;一个炫酷的头像悬停效果 收获了不少同学的喜欢&#xff0c;原作者近期进行了优化升级。本文将升级后的核心实现过程进行梳理讲解&#xff0c;如果没看过第一期的推荐先看看第一期的实现过程。升级后的效果如下图所示。 gif动画效果如…

0008Java程序设计-JSP学生成绩管理系统设计与实现

摘 要目录系统实现开发环境 摘 要 随着网络的不断发展&#xff0c;一个好的成绩查询系统&#xff0c;不仅便于学生查询成绩、查询个人信息&#xff0c;而且有利于管理员对学生成绩的统一管理&#xff0c;考试之后学生能及时的对个人信息进行查看&#xff0c;减少了老师和学生之…

高性能MySQL实战(一):表结构 | 京东物流技术团队

最近因需求改动新增了一些数据库表&#xff0c;但是在定义表结构时&#xff0c;具体列属性的选择有些不知其所以然&#xff0c;索引的添加也有遗漏和不规范的地方&#xff0c;所以我打算为创建一个高性能表的过程以实战的形式写一个专题&#xff0c;以此来学习和巩固这些知识。…

09强化学习

强化学习有关词汇 state:对Environment的完整描述 action: 给定环境中所有有效操作的集合&#xff0c;通常称为动作空间 agent:执行action的模型 Environment:代理之外的所有部分。agent可以直接或间接的与之交互的一切&#xff0c;Agent执行操作时&#xff0c;Environment…

BarCodeWiz ActiveX Control Crack

BarCodeWiz ActiveX Control Crack BarcodeWiz ActiveX Control–只需单击按钮即可将所有基本条形码类型添加到Microsoft Office中。在Microsoft Word中&#xff0c;创建单独的条形码、标签页或合并文档。在Microsoft Excel中&#xff0c;选择单元格范围并自动将每个单元格转换…

css的常见伪元素使用

1.first-line 元素首行设置特殊样式。 效果演示&#xff1a; <div class"top"><p>可以使用 "first-line" 伪元素向文本的首行设置特殊样式。<br> 换行内容 </p></div> .top p::first-line {color: red;} 2.first-lette…

每日一题——判断是不是平衡二叉树

题目 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是一棵空树…

华为OD机试真题 Java 实现【通过软盘拷贝文件】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

C++的对象与类的含义

C是一门面向对象的编程语言&#xff0c;理解C需要掌握类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;这两个概念。 C 中的类&#xff08;Class&#xff09;可以看做C语言中结构体&#xff08;Struct&#xff09;的升级版。结构体是一种构造类型&#x…