首页 > 编程语言 >python-numpy

python-numpy

时间:2023-03-17 15:33:57浏览次数:33  
标签:python np 数组 print import array numpy

numpy简介

 

一、Ndarray对象

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

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

ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

 

1、Ndarray

   基本的ndarray是使用 NumPy 中的数组函数创建的;

  如:numpy.array

  语法:

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

示例1:

 import numpy as np 
a = np.array([1,2,3])  
print(a)

示例2:

 # 多一个维度  
import numpy as np 
a = np.array([[1,  2],  [3,  4]])  
print(a)

输出:

 示例·3:

 # dtype 参数  
import numpy as np 
a = np.array([1,  2,  3], dtype = complex)  
print(a)

输出:

 

二、数据类型对象

语法:

numpy.dtype(object, align, copy)

 参数:

  • Object:被转换为数据类型的对象。

  • Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。

  • Copy : 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

 

三、数组属性

1、ndarray.shape

  这一数组属性返回一个包含数组维度的元组,他也可以用于调整数组大小;

例1:

 import numpy as np 
a = np.array([[1,2,3],[4,5,6]])  
print a.shape

 例2:

# 这会调整数组大小  
import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) a.shape =  (3,2)  
print a 

 例3:

numpy也提供了reshape函数来调整数组大小

 import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2)  
print b

2、ndarray.ndim

返回数组的维度

例1:

# 等间隔数字的数组  
import numpy as np 
a = np.arange(24) 
print a

例2:

 # 一维数组  
import numpy as np 
a = np.arange(24) a.ndim 
# 现在调整其大小
b = a.reshape(2,4,3)  
print b 
# b 现在拥有三个维度

3、numpy.itemsize

  返回数组中每个元素的字节单位长度

例1:

# 数组的 dtype 为 int8(一个字节)  
import numpy as np 
x = np.array([1,2,3,4,5], dtype = np.int8)  
print x.itemsize

 例2:

# 数组的 dtype 现在为 float32(四个字节)  
import numpy as np 
x = np.array([1,2,3,4,5], dtype = np.float32)  
print x.itemsize

 

4、numpy.empty

  通过任何下列数组创建列程或使用低级ndarray构造函数构造

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

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

参数:

 例:

import numpy as np 
x = np.empty([3,2], dtype =  int)  
print x

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

5、numpy.zeros

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

  参数:

 例1:

# 含有 5 个 0 的数组,默认类型为 float  
import numpy as np 
x = np.zeros(5)  
print x

例:

# 自定义类型 
import numpy as np 
x = np.zeros((2,2), dtype =  [('x',  'i4'),  ('y',  'i4')])  
print x

6、numpy.ones

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

 numpy.ones(shape, dtype = None, order = 'C')

参数:

 

 

四、来自现有数据的数组

1、asarray 

  语法:

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

参数:

 例1:

# 将列表转换为 ndarray 
import numpy as np 
x =  [1,2,3] 
a = np.asarray(x)  
print a

 

 

五、来自数值范围的数组

1、arange

  返回ndarray对象,包含给定范围内的等间隔值;

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

参数:

 例1:

import numpy as np
x = np.arange(5)  
print x

 例2:

# 设置了起始值和终止值参数  
import numpy as np
x = np.arange(10,20,2)  
print x

2、linspace

  类似于arange()函数,在此函数中,指定了范围之间的均匀间隔数量,而不是步长

  语法:

numpy.linspace(start, stop, num, endpoint, retstep, dtype)

参数:

 例1:

import numpy as np
x = np.linspace(10,20,5)  
print x

 例2:

# 将 endpoint 设为 false
import numpy as np
x = np.linspace(10,20,  5, endpoint =  False)  
print x

 

六、切片和索引

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

 

1、切片

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

例1:

import numpy as np
a = np.arange(10)
s = slice(2,7,2)  
print a[s]

例2:

 通过将由冒号分隔的切片参数(start:stop:step)直接提供给ndarray对象,也可以获得相同的结果。

import numpy as np
a = np.arange(10)
b = a[2:7:2]  
print b

例3:

# 最开始的数组  
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print  '我们的数组是:'  
print a
print  '\n'  
# 这会返回第二列元素的数组:  
print  '第二列的元素是:'  
print a[...,1]  
print  '\n'  
# 现在我们从第二行切片所有元素:  
print  '第二行的元素是:'  
print a[1,...]  
print  '\n'  
# 现在我们从第二列向后切片所有元素:
print  '第二列及其剩余元素是:'  
print a[...,1:]

2、索引

(1)整数索引

这种机制有助于基于 N 维索引来获取数组中任意元素。 每个整数数组表示该维度的下标值。 当索引的元素个数就是目标ndarray的维度时,会变得相当直接。

以下示例获取了ndarray对象中每一行指定列的一个元素。 因此,行索引包含所有行号,列索引指定要选择的元素。

例1:

import numpy as np 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
print y

 例2:

获取4*3数组中的每个角处的元素。行索引是[0,0]和[3,3],而列索引是[0,2]和[0,2]:

import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我们的数组是:'  
print x 
print  '\n' 
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols]  
print  '这个数组的每个角处的元素是:'  
print y

 例3:

高级和基本索引可以通过使用切片:或省略号...与索引数组组合。 以下示例使用slice作为列索引和高级索引。 当切片用于两者时,结果是相同的。 但高级索引会导致复制,并且可能有不同的内存布局。

import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我们的数组是:'  
print x 
print  '\n'  
# 切片
z = x[1:4,1:3]  
print  '切片之后,我们的数组变为:'  
print z 
print  '\n'  
# 对列使用高级索引 
y = x[1:4,[1,2]] 
print  '对列使用高级索引来切片:'  
print y

(2)布尔索引

例1:

import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我们的数组是:'  
print x 
print  '\n'  
# 现在我们会打印出大于 5 的元素  
print  '大于 5 的元素是:'  
print x[x >  5]

 例2:

import numpy as np 
a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print a[~np.isnan(a)]

 

七、广播

  指numpy在算术运算期间处理不同形状的数组的能力,对数组的算数运算通常在相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。

例1:

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print(c)

如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

如果满足以下规则,可以进行广播:

  • ndim较小的数组会在前面追加一个长度为 1 的维度。

  • 输出数组的每个维度的大小是输入数组该维度大小的最大值。

  • 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。

  • 如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。

如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的。

  • 数组拥有相同形状。

  • 数组拥有相同的维数,每个维度拥有相同长度,或者长度为 1。

  • 数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立。

import numpy as np 
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
b = np.array([1.0,2.0,3.0])  
print  '第一个数组:'  
print a 
print  '\n'  
print  '第二个数组:'  
print b 
print  '\n'  
print  '第一个数组加第二个数组:'  
print a + b

 

 

 

八、数组上的迭代

numpy包包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。数组的每个元素可使用python的标准Iterator接口来访问。

例1:

a=np.arange(0,60,5)
a=a.reshape(3,4)
print('原始数组是:')
print(a)
print('修改后的数组是:')
for x in np.nditer(a):
    print(x)

 例2:

迭代的顺序匹配数组的内容布局,而不考虑特定的排序,这可以通过迭代上述数组的转置来看到。

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4)  
print  '原始数组是:'  
print a 
print  '\n'  
print  '原始数组的转置是:' 
b = a.T 
print b 
print  '\n'  
print  '修改后的数组是:'  
for x in np.nditer(b):  
    print x,

 

标签:python,np,数组,print,import,array,numpy
From: https://www.cnblogs.com/xiao-wang-tong-xue/p/17219315.html

相关文章