一个NumPy模块就要学这么多?师傅发两个月就整理了一个模块资料

一个NumPy模块就要学这么多?师傅发两个月就整理了一个模块资料

一、NumPy简介

其官网是: http://www.numpy.org/

NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的GIL(全局解释器锁),运行效率极好,是大量机器学习框架的基础库!

关于GIL请参考博客: http://www.cnblogs.com/wj-1314/p/9056555.html

NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括

  • 一个强大的N维数组对象ndrray;
  • 比较成熟的(广播)函数库;
  • 用于整合C/C++和Fortran代码的工具包;
  • 实用的线性代数、傅里叶变换和随机生成函数

私信小编01 02 03 04 即可获取数十套PDF以及大量的学习资料!

1.1 NumPy的优点:

  • 对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多;
  • NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的;
  • NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多

当然, NumPy也有其不足之处,由于 NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对 TB级大文件的处理;此外, NumPy数组的通用性不及 Python提供的 list容器。因此,在科学计算之外的领域, NumPy的优势也就不那么明显。

二、数组ndarray

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,该对象由两部分组成:

  • 实际的数据;
  • 描述这些数据的元数据;

Numpy中定义的最重要的对象是成为ndarray的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。

ndarray中的每个元素在内存中使用相同大小的块。ndarray中每个元素是数据类型对象的对象(称为dtype)

大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据。数组的维数称为秩,简单来说就是如果你需要获取数组中一个特定元素所需的坐标数,如a是一个2×3×4的矩阵,你索引其中的一个元素必须给定三个坐标a[x,y,z],故它的维数就是3。而轴可以理解为一种对数组空间的分割,以数组a为例,如果我们以0为轴,那么a可以看成是一个由两个元素构成的数组,其中每个元素都是一个3×4的数组。

我们可以直接将数组看作一种新的数据类型,就像list、tuple、dict一样,但数组中所有元素的类型必须是一致的,Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy中添加了许多其他的数据类型,如bool、inti、int64、float32、complex64等。同时,它也有许多其特有的属性方法

官方解释:

class ndarray(object):
 """
 ndarray(shape,dtype=float,buffer=None,offset=0,strides=None,order=None)

An array object represents a multidimensional,homogeneous array
of fixed-size items. An associated data-type object describes the
format of each element in the array (its byte-order,how many bytes it
occupies in memory,whether it is an integer,a floating point number,or something else,etc.)

Arrays should be constructed using array,zeros or empty (refer
to the See Also section below). The parameters given here refer to
a low-level method (<a href="https://www.jb51.cc/tag/ndarray/" target="_blank" class="keywords">ndarray</a>(...)) for instantiating an array.

For more information,refer to the numpy module and examine the
methods and attributes of an array.

Parameters

(for the new method; see Notes below)

shape : tuple of ints
Shape of created array.
dtype : data-type,optional
Any object that can be interpreted as a numpy data type.
buffer : object exposing buffer interface,optional
Used to fill the array with data.
offset : int,optional
Offset of array data in buffer.
strides : tuple of ints,optional
Strides of data in memory.
order : {'C','F'},optional
Row-major (C-style) or column-major (Fortran-style) order.

Attributes

T : ndarray
Transpose of the array.
data : buffer
The array's elements,in memory.
dtype : dtype object
Describes the format of the elements in the array.
flags : dict
Dictionary containing information related to memory use,e.g.,'C_CONTIGUOUS','OWNDATA','WRITEABLE',etc.
flat : numpy.flatiter object
Flattened version of the array as an iterator. The iterator
allows assignments,x.flat = 3 (See <a href="https://www.jb51.cc/tag/ndarray/" target="_blank" class="keywords">ndarray</a>.flat for
assignment examples; Todo).
imag : ndarray
Imaginary part of the array.
real : ndarray
Real part of the array.
size : int
Number of elements in the array.
itemsize : int
The memory use of each array element in bytes.
nbytes : int
The total number of bytes required to store the array data,i.e.,itemsize * size.
ndim : int
The array's number of dimensions.
shape : tuple of ints
Shape of the array.
strides : tuple of ints
The step-size required to move from one element to the next in
memory. For example,a contiguous (3,4) array of type
int16 in C-order has strides (8,2). This implies that
to move from element to element in memory requires jumps of 2 bytes.
To move from row-to-row,one needs to jump 8 bytes at a time
(2 * 4).
ctypes : ctypes object
Class containing properties of the array needed for interaction
with ctypes.
base : ndarray
If the array is a view into another array,that array is its base
(unless that array is also a view). The base array is where the
array data is actually stored.

See Also

array : Construct an array.
zeros : Create an array,each element of which is zero.
empty : Create an array,but leave its allocated memory unchanged (i.e.,it contains "garbage").
dtype : Create a data-type.

Notes

There are two modes of creating an array using <a href="https://www.jb51.cc/tag/new/" target="_blank" class="keywords">__new__</a>:

  1. If buffer is None,then only shape,dtype,and order
    are used.
  2. If buffer is an object exposing the buffer interface,then
    all keywords are interpreted.

No <a href="https://www.jb51.cc/tag/init/" target="_blank" class="keywords">__init__</a> method is needed because the array is fully initialized
after the <a href="https://www.jb51.cc/tag/new/" target="_blank" class="keywords">__new__</a> method.

Examples

These examples illustrate the low-level <a href="https://www.jb51.cc/tag/ndarray/" target="_blank" class="keywords">ndarray</a> constructor. Refer
to the See Also section above for easier ways of constructing an
ndarray.

First mode,buffer is None:

np.ndarray(shape=(2,2),order='F')
array([[ -1.13698227e+002,4.25087011e-303],[ 2.88528414e-306,3.27025015e-309]]) #random

Second mode:

np.ndarray((2,),buffer=np.array([1,2,3]),... offset=np.int_().itemsize,... dtype=int) # offset = 1*itemsize,i.e. skip first element
array([2,3])
"""
def all(self,axis=None,out=None,keepdims=False): # real signature unkNown; restored from doc
"""
a.all(axis=None,keepdims=False)

Returns True if all elements evaluate to True.

Refer to numpy.all for full documentation.

See Also

numpy.all : equivalent function
"""
pass
def any(self,keepdims=False): # real signature unkNown; restored from doc
"""
a.any(axis=None,keepdims=False)

Returns True if any of the elements of a evaluate to True.

Refer to numpy.any for full documentation.

See Also

numpy.any : equivalent function
"""
pass
def argmax(self,out=None): # real signature unkNown; restored from doc
"""
a.argmax(axis=None,out=None)

Return indices of the maximum values along the given axis.

Refer to numpy.argmax for full documentation.

See Also

numpy.argmax : equivalent function
"""
pass
def argmin(self,out=None): # real signature unkNown; restored from doc
"""
a.argmin(axis=None,out=None)

Return indices of the minimum values along the given axis of a.

Refer to numpy.argmin for detailed documentation.

See Also

numpy.argmin : equivalent function
"""
pass
def argpartition(self,kth,axis=-1,kind='introselect',order=None): # real signature unkNown; restored from doc
"""
a.argpartition(kth,order=None)

Returns the indices that would partition this array.

Refer to numpy.argpartition for full documentation.

.. versionadded:: 1.8.0

See Also

numpy.argpartition : equivalent function
"""
pass
def argsort(self,kind='quicksort',order=None): # real signature unkNown; restored from doc
"""
a.argsort(axis=-1,order=None)

Returns the indices that would sort this array.

Refer to numpy.argsort for full documentation.

See Also

numpy.argsort : equivalent function
"""
pass
def astype(self,dtype,order='K',casting='unsafe',subok=True,copy=True): # real signature unkNown; restored from doc
"""
a.astype(dtype,copy=True)

copy of the array,cast to a specified type.

Parameters

dtype : str or dtype
Typecode or data-type to which the array is cast.
order : {'C','F','A','K'},optional
Controls the memory layout order of the result.
'C' means C order,'F' means Fortran order,'A'
means 'F' order if all the arrays are Fortran contiguous,'C' order otherwise,and 'K' means as close to the
order the array elements appear in memory as possible.
Default is 'K'.
casting : {'no','equiv','safe','same_kind','unsafe'},optional
Controls what kind of data casting may occur. Defaults to 'unsafe'
for backwards compatibility.

  • 'no' means the data types should not be cast at all.
  • 'equiv' means only byte-order changes are allowed.
  • 'safe' means only casts which can preserve values are allowed.
  • 'same_kind' means only safe casts or casts within a kind,like float64 to float32,are allowed.
  • 'unsafe' means any data conversions may be done.
    subok : bool,optional
    If True,then sub-classes will be passed-through (default),otherwise
    the returned array will be forced to be a base-class array.
    copy : bool,optional
    By default,astype always returns a newly allocated array. If this
    is set to false,and the dtype,order,and subok
    requirements are satisfied,the input array is returned instead
    of a copy.

Returns

arr_t : ndarray
Unless <a href="https://www.jb51.cc/tag/cop/" target="_blank" class="keywords">cop</a>y is False and the other conditions for returning the input
array are satisfied (see description for <a href="https://www.jb51.cc/tag/cop/" target="_blank" class="keywords">cop</a>y input parameter),arr_t
is a new array of the same shape as the input array,with dtype,order
given by dtype,order.

Notes

Starting in NumPy 1.9,astype method Now returns an error if the string
dtype to cast to is not long enough in 'safe' casting mode to hold the max
value of integer/float array that is being casted. PrevIoUsly the casting
was allowed even if the result was truncated.

Raises

ComplexWarning
When casting from complex to float or int. To avoid this,one should use a.real.astype(t).

Examples

x = np.array([1,2.5])
x
array([ 1.,2.,2.5])

x.astype(int)
array([1,2])
"""
pass
def byteswap(self,inplace=False): # real signature unkNown; restored from doc
"""
a.byteswap(inplace=False)

Swap the bytes of the array elements

Toggle between low-endian and big-endian data representation by
returning a byteswapped array,optionally swapped in-place.

Parameters

inplace : bool,optional
If True,swap bytes in-place,default is False.

Returns

out : ndarray
The byteswapped array. If inplace is True,this is

就不全部贴上来了 你可以到官网看!原来我师父就是把官网的介绍搬过来了而已!

2.1 常用ndarray属性

  • dtype 描述数组元素的类型
  • shape 以tuple表示的数组形状
  • ndim 数组的维度
  • size 数组中元素的个数
  • itemsize 数组中的元素在内存所占字节数
  • T 数组的转置
  • flat 返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖
  • real/imag 给出复数数组的实部/虚部
  • nbytes 数组占用的存储空间
import numpy as np
# 创建简单的列表
a = [1,3,4,5,6]
# 讲列表转换为数组
b = np.array(a)
# Numpy查看数组属性
print(b.size)
#6
# 数组形状
print(b.shape)
# (6,)
# 数组维度
print(b.ndim)
# 1
# 数组元素类型
print(b.dtype)
# int32
import numpy as np
a = np.array([1,3])
print(a)
# [1 2 3]
# 多于一个维度
a = np.array([[1,2],[3,4]])
print(a)
# [[1 2]
# [3 4]]
# 最小维度
a = np.array([1,5],ndmin = 2)
print(a)
# [[1 2 3 4 5]]
# dtype 参数
a = np.array([1,3],dtype = complex)
print(a)
# [1.+0.j 2.+0.j 3.+0.j]

ndarray 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。

2.2 常用ndarray方法

  • reshape(…) 返回一个给定shape的数组的副本
  • resize(…) 返回给定shape的数组,原数组shape发生改变
  • flatten()/ravel() 返回展平数组,原数组不改变
  • astype(dtype) 返回指定元素类型的数组副本
  • fill() 将数组元素全部设定为一个标量值
  • sum/Prod() 计算所有数组元素的和/积
  • mean()/var()/std() 返回数组元素的均值/方差/标准差
  • max()/min()/ptp()/median() 返回数组元素的最大值/最小值/取值范围/中位数
  • argmax()/argmin() 返回最大值/最小值的索引
  • sort() 对数组进行排序,axis指定排序的轴;kind指定排序算法,认是快速排序
  • view()/copy() view创造一个新的数组对象指向同一数据;copy是深复制
  • tolist() 将数组完全转为列表,注意与直接使用list(array)的区别
  • compress() 返回满足条件的元素构成的数组

numpy.reshape:

import numpy as np
a = np.arange(8)
print('原始数组:')
print(a)
print('
')
b = a.reshape(4,2)
print('修改后的数组:')
print(b)
'''结果
原始数组:
[0 1 2 3 4 5 6 7]
修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
'''

numpy.ndarray.flatten:

import numpy as np
a = np.arange(8).reshape(2,4)
print('原数组:')
print(a)
print('
')
# default is column-major
print('展开的数组:')
print(a.flatten())
print('
')
print('以 F 风格顺序展开的数组:')
print(a.flatten(order = 'F'))
'''结果:
原数组:
[[0 1 2 3]
 [4 5 6 7]]
展开的数组:
[0 1 2 3 4 5 6 7]
以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]
'''

numpy.ravel:

import numpy as np
a = np.arange(8).reshape(2,4)
print('原数组:')
print(a)
print('
')
print('调用 ravel 函数之后:')
print(a.ravel())
print('
')
print('以 F 风格顺序调用 ravel 函数之后:')
print(a.ravel(order = 'F'))
'''结果:
原数组:
[[0 1 2 3]
 [4 5 6 7]]
调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]
以 F 风格顺序调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]'''

2.3 数组的创建

numpy中使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表。

2.3.1 一维数组的创建

可以使用numpy中的arange()函数创建一维有序数组,它是内置函数range的扩展版。

In [1]: import numpy as np
In [2]: ls1 = range(10)
In [3]: list(ls1)
Out[3]: [0,1,6,7,8,9]
In [4]: type(ls1)
Out[4]: range
In [5]: ls2 = np.arange(10)
In [6]: list(ls2)
Out[6]: [0,9]
In [7]: type(ls2)
Out[7]: numpy.ndarray

通过arange生成的序列就不是简简单单的列表类型了,而是一个一维数组。

如果一维数组不是一个规律的有序元素,而是人为的输入,就需要array()函数创建了。

In [8]: arr1 = np.array((1,20,13,28,22))
In [9]: arr1
Out[9]: array([ 1,22])
In [10]: type(arr1)
Out[10]: numpy.ndarray

上面是 元组 序列构成的一维数组。

In [11]: arr2 = np.array([1,21]) 
In [12]: arr2
Out[12]: array([ 1,21])
In [13]: type(arr2)
Out[13]: numpy.ndarray

上面是 由列表 序列构成的一维数组。

2.3.2 二维数组的创建

二维数组的创建,其实在就是列表套列表或元组元组

In [14]: arr3 = np.array(((1,3),(5,21),(34,55,89,144)))
In [15]: arr3
Out[15]:
array([[ 1,[ 5,21],[ 34,144]])

上面使用 元组元组 的方式。

In [16]: arr4 = np.array([[1,4],[5,8],[9,10,11,12]])
In [17]: arr4
Out[17]:
array([[ 1,[ 9,12]])

上面使用 列表套列表 的方式。

对于 高维数组 在将来的数据分析中用的比较少,这里关于高维数组的创建就不赘述了,构建方法仍然是套的方式。

上面所介绍的都是人为设定的一维、二维或高维数组,numpy中也提供了几种特殊的数组,它们是:

In [18]: np.ones(3) #返回一维元素全为1的数组
Out[18]: array([ 1.,1.,1.])
In [19]: np.ones([3,4]) #返回元素全为1的3×4二维数组
Out[19]:
array([[ 1.,1.],[ 1.,1.]])

In [20]: np.zeros(3) #返回一维元素全为0的数组
Out[20]: array([ 0.,0.,0.])
In [21]: np.zeros([3,4]) #返回元素全为0的3×4二维数组
Out[21]:
array([[ 0.,0.],[ 0.,0.]])
In [22]: np.empty(3) #返回一维空数组
Out[22]: array([ 0.,0.])
In [23]: np.empty([3,4]) #返回3×4二维空数组
Out[23]:
array([[ 0.,0.]])

2.3.3 ones函数

返回特定大小,以1填充的新数组

>>> import numpy as np
>>> a=np.ones(3);a
array([ 1.,1.])
>>> b=np.ones((3,2));b
array([[ 1.,1.]])

2.3.4 zeros函数

返回特定大小,以0填充的新数组。

官方库的解释:

def zeros(shape,dtype=None,order='C'): # real signature unkNown; restored from __doc__
 """
 zeros(shape,order='C')

Return a new array of given shape and type,filled with zeros.

Parameters

shape : int or tuple of ints
Shape of the new array,(2,3) or 2.
dtype : data-type,optional
The desired data-type for the array,numpy.int8. Default is
numpy.float64.
order : {'C',optional,default: 'C'
Whether to store multi-dimensional data in row-major
(C-style) or column-major (Fortran-style) order in
memory.

Returns

out : ndarray
Array of zeros with the given shape,and order.

See Also

zeros_like : Return an array of zeros with shape and type of input.
empty : Return a new uninitialized array.
ones : Return a new array setting values to one.
full : Return a new array of given shape filled with value.

Examples

np.zeros(5)
array([ 0.,0.])

np.zeros((5,dtype=int)
array([0,0])

np.zeros((2,1))
array([[ 0.],[ 0.]])

s = (2,2)
np.zeros(s)
array([[ 0.,0.]])

np.zeros((2,dtype=[('x','i4'),('y','i4')]) # custom dtype
array([(0,0),(0,0)],'<i4'),'<i4')])
"""
pass

numpy.zeros(shape,order=’C’)

参数:

shape:int或ints序列
 新数组的形状,例如(2,3 )或2。
dtype:数据类型,可选
 数组的所需数据类型,例如numpy.int8。认值为 numpy.float64。
order:{'C','F'},可选
是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。

返回:

out:ndarray
 具有给定形状,数据类型和顺序的零数组。
>>> c=np.zeros(3)
>>> c
array([ 0.,0.])
>>> d=np.zeros((2,3));d 
array([[ 0.,0.]]) 
#d=np.zeros(2,3)会报错,d=np.zeros(3,dtype=int)来改变认的数据类型

2.3.5 eye&identity函数

>>> e=np.eye(3);e
array([[ 1.,1.]])
>>> e=np.eye(3,2);e
array([[ 1.,0.]])
>>> e=np.eye(3,1);e
array([[ 1.],[ 0.],[ 0.]])
>>> e=np.eye(3,3);e
array([[ 1.,1);e
array([[ 0.,0.]])
e=np.eye(3,2);e
array([[ 0.,3);e
array([[ 0.,4);e
array([[ 0.,0.]])
>>> p=np.identity(4);p
array([[ 1.,1.]])
>>> p=np.identity(4,3);p #会报错
>>> p=np.identity((4,3));p #会报错

2.3.6 empty函数

它创建指定形状和dtype的未初始化数组。它使用以下构造函数

numpy.empty(shape,dtype = float,order = 'C')

注意:数组为随机值,因为他们未初始化。

import numpy as np
x = np.empty([3,dtype = int)
print(x)
# [[1762 0]
# [ 0 0]
# [ 0 0]]
>>> a=np.empty(3);a
array([ 1.60091154e-163,1.12069303e-258,3.23790862e-318])
>>> a=np.empty((3,3));a
array([[ 1.57741456e-284,1.57680914e-284,1.56735002e-163],[ 1.56205068e-163,1.62511438e-163,1.21880041e+171],[ 1.57757869e-052,7.34292780e+223,4.71235856e+257]])

2.3.7 ones_like zero_like empy_like函数

>>> a=np.array([[[1,[1,2]],[[1,2]]])
>>> a.shape
(3,2)
>>> b=np.ones_like(a)
>>> b
array([[[1,1],1]],1]]])
>>> b=np.zeros_like(a);b
array([[[0,0],[0,0]],[[0,0]]])
>>> a=np.array([[[1,2]]])
>>> b=np.empty_like(a);b
array([[[39125057,40012256],[81313824,81313856]],[[ 0,[ 0,0]]])
#注意,shape和dtype均复制

三,Numpy数据类型

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

序号数据类型及描述1.bool_存储为一个字节的布尔值(真或假)2.int_认整数,相当于 C 的long,通常为int32或int643.intc相当于 C 的int,通常为int32或int644.intp用于索引的整数,相当于 C 的size_t,通常为int32或int645.int8字节(-128 ~ 127)6.int1616 位整数(-32768 ~ 32767)7.int3232 位整数(-2147483648 ~ 2147483647)8.int6464 位整数(-9223372036854775808 ~ 9223372036854775807)9.uint88 位无符号整数(0 ~ 255)10.uint1616 位无符号整数(0 ~ 65535)11.uint3232 位无符号整数(0 ~ 4294967295)12.uint6464 位无符号整数(0 ~ 18446744073709551615)13.float_float64的简写14.float16半精度浮点:符号位,5 位指数,10 位尾数15.float32单精度浮点:符号位,8 位指数,23 位尾数16.float64双精度浮点:符号位,11 位指数,52 位尾数17.complex_complex128的简写18.complex64复数,由两个 32 位浮点表示(实部和虚部)19.complex128复数,由两个 64 位浮点表示(实部和虚部)

NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。

3.1 数据类型对象(dtype)

数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:

  • 数据类型(整数、浮点或者 Python 对象)
  • 数据大小
  • 字节序(小端或大端)
  • 结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
  • 如果数据类型是子序列,它的形状和数据类型。

字节顺序取决于数据类型的前缀<或>。<意味着编码是小端(最小有效字节存储在最小地址中)。>意味着编码是大端(最大有效字节存储在最小地址中)。

dtype语法构造:

numpy.dtype(object,align,copy)

参数为:

Object:被转换为数据类型的对象。 
Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。 
copy: 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

示例:

# 使用数组标量类型
import numpy as np
dt = np.dtype(np.int32)
print(dt)
# int32
# int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。
dt = np.dtype('i4')
print(dt)
# int32
# 使用端记号
dt = np.dtype('>i4')
print(dt)
# >i4
# 首先创建结构化数据类型。
dt = np.dtype([('age',np.int8)])
print(dt)
# [('age','i1')]
# 现在将其应用于 ndarray 对象
dt = np.dtype([('age',np.int8)])
a = np.array([(10,(20,(30,)],dtype = dt)
print(a)
# [(10,) (20,) (30,)]
# 文件名称可用于访问 age 列的内容
dt = np.dtype([('age',dtype = dt)
print(a['age'])
# [10 20 30]

四,Numpy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,就像python的内置容器对象一样。

nadarray 对象中的元素遵循基于零的索引,有三种可用的索引方法类型:字段访问,基础切片和高级索引。

基本切片是Python中基本切片概念到n维的扩展,通过start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。

练习:

import numpy as np
a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]
s = slice(2,2)
print(s)
# slice(2,2)
print(a[s])
# [2 4 6]
b = a[2:7:2]
print(b)
# [2 4 6]
# 对单个元素进行切片
b = a[5]
print(b)
# 5
# 对始于索引的元素进行切片
print(a[2:])
# [2 3 4 5 6 7 8 9]
# 对索引之间的元素进行切片
print(a[2:5])
# [2 3 4]
# 二维数组
# 最开始的数组
import numpy as np
a = np.array([[1,[4,6]])
print('我们的数组是:')
print(a)
print ('
')
# 这会返回第二列元素的数组:
print ('第二列的元素是:')
print(a[...,1])
print('
')
# 现在我们从第二行切片所有元素:
print ('第二行的元素是:')
print(a[1,...])
print( '
')
# 现在我们从第二列向后切片所有元素:
print ('第二列及其剩余元素是:')
print(a[...,1:])
'''
我们的数组是:
[[1 2 3]
 [3 4 5]
 [4 5 6]]
第二列的元素是:
[2 4 5]
第二行的元素是:
[3 4 5]
第二列及其剩余元素是:
[[2 3]
 [4 5]
 [5 6]]'''

五,Numpy-IO

ndarray对象可以保存到磁盘文件并从磁盘文件加载,可用的IO功能有:

  • load()和save() 函数处理Numpy 二进制文件(带npy扩展名)。
  • loadtxt() 和savetxt() 函数处理正常的文本文件

Numpy为ndarray对象引入了一个简单的文件格式,这个npy文件在磁盘文件中,存储重建ndarray所需的数据,图形,dtype和其他信息,以便正确获取数组,即使该文件在具有不同架构的一台机器上。

numpy.save()

函数是讲文件输入数组存储在具有npy扩展名的磁盘文件中。

import numpy as np
a = np.array([1,5])
np.save('outfile',a)

一个NumPy模块就要学这么多?师傅发两个月就整理了一个模块资料

为了从outfile.npy重建数组,请使用load()函数

import numpy as np
b = np.load('outfile.npy')
print(b)
# [1 2 3 4 5]

save()和load()函数接受一个附加的布尔参数allow_pickles。Python中的pickle用在保存到磁盘文件或者从磁盘文件读取之前,对对象进行序列化和反序列化。

savetxt()

以简单文本文件格式存储和获取数组数据,通过savetxt()和loadtxt()函数来完成的。

import numpy as np
a = np.array([1,5])
np.savetxt('out.txt',a)
b = np.loadtxt('out.txt')
print(b)
# [1. 2. 3. 4. 5.]

savetxt()和loadtxt()函数接受附加的可选参数,例如页首,页尾和分隔符。

六,numpy中的ndarray与array的区别、不同

答:Well,np.array is just a convenience function to create an ndarray,it is not a class itself.

(嗯,np.array只是一个便捷的函数,用来创建一个ndarray,它本身不是一个类)

You can also create an array using np.ndarray,but it is not the recommended way. From the docstring of np.ndarray:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实