基于notebook
光速入门示例
In [1]:
import numpy as np # 导入
In [2]:
a = np.arange(15).reshape(3, 5) # 创建矩阵并改变形状
a
Out[2]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [3]:
a.shape # 形状
Out[3]:
(3, 5)
In [4]:
a.ndim # 轴数
Out[4]:
2
In [5]:
a.dtype # 类型
Out[5]:
dtype('int32')
In [6]:
a.dtype.name
Out[6]:
'int32'
In [7]:
a.size # 总数
Out[7]:
15
In [8]:
a.itemsize # 每个元素的大小(以字节为单位)
Out[8]:
4
In [9]:
a.data # 缓冲区
Out[9]:
<memory at 0x0000011D14E14BA8>
In [10]:
type(a)
Out[10]:
numpy.ndarray
矩阵创建
In [11]:
a = np.array([2,3,4]) # int64
b = np.array([1.2, 3.5, 5.1]) # float64
In [12]:
b = np.array([(1,2,3), (4,5,6)]) # 列表转换数组
b
Out[12]:
array([[1, 2, 3],
[4, 5, 6]])
In [13]:
c = np.array( [ [1,2], [3,4] ], dtype=complex ) # 指定类型
c
Out[13]:
array([[1.+0.j, 2.+0.j],
[3.+0.j, 4.+0.j]])
In [14]:
np.zeros( (3,4) )
Out[14]:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
In [15]:
np.ones( (2,3,4), dtype=np.int16 ) # 指定数据类型
Out[15]:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)
In [16]:
np.empty( (2,3) ) # 未初始化
Out[16]:
array([[0., 0., 0.],
[0., 0., 0.]])
In [17]:
np.arange( 10, 30, 5 )
Out[17]:
array([10, 15, 20, 25])
In [18]:
np.arange( 0, 2, 0.3 ) # 浮点数
Out[18]:
array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
In [19]:
np.linspace( 0, 2, 9 ) # 9 个数 范围 0 到 2
Out[19]:
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
In [20]:
import math
pi = math.pi
x = np.linspace( 0, 2*pi, 10 ) # 对于在很多点上求函数值很有用
x
Out[20]:
array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,
3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])
In [21]:
np.zeros_like(x)
Out[21]:
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [22]:
np.ones_like(x)
Out[22]:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [23]:
np.empty_like(np.arange(12).reshape(2,6))
Out[23]:
array([[ 858993459, 1070805811, 858993459, 1071854387, -858993460,
1072483532],
[ 858993459, 1072902963, 0, 1073217536, -858993460,
1073532108]])
In [24]:
#扩展 不做要求
np.fromfunction(lambda i, j: i == j, (2, 2), dtype=int)
# numpy.fromfile(file,dtype = float,count = -1,sep ='',offset = 0 ) 文件读取 了解即可
Out[24]:
array([[ True, False],
[False, True]])
矩阵输出
In [25]:
np.arange(6) # 最后一个轴从左到右打印
Out[25]:
array([0, 1, 2, 3, 4, 5])
In [26]:
np.arange(12).reshape(4,3) # 倒数第二个从上到下打印
Out[26]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
In [27]:
np.arange(24).reshape(2,3,4) # 其余的也从上到下打印,每个切片之间用空行隔开
Out[27]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [28]:
np.arange(10000) # 省略太大的数据显示
Out[28]:
array([ 0, 1, 2, ..., 9997, 9998, 9999])
In [29]:
print(np.arange(10000).reshape(100,100))
[[ 0 1 2 ... 97 98 99]
[ 100 101 102 ... 197 198 199]
[ 200 201 202 ... 297 298 299]
...
[9700 9701 9702 ... 9797 9798 9799]
[9800 9801 9802 ... 9897 9898 9899]
[9900 9901 9902 ... 9997 9998 9999]]
In [30]:
# np.set_printoptions(threshold=sys.maxsize) # 强制输出所有数据
运算
In [31]:
a = np.array( [20,30,40,50] )
b = np.arange( 4 ) # array([0, 1, 2, 3])
a-b
Out[31]:
array([20, 29, 38, 47])
In [32]:
b**2
Out[32]:
array([0, 1, 4, 9], dtype=int32)
In [33]:
10*np.sin(a)
Out[33]:
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
In [34]:
a<35 # a = np.array( [20,30,40,50] )
Out[34]:
array([ True, True, False, False])
In [35]:
# 乘积运算符*在NumPy数组中按元素进行操作。可以使用@运算符(python>= 3.5)或dot函数或方法执行矩阵乘积:
In [36]:
A = np.array( [[1,1],
[0,1]] )
In [37]:
B = np.array( [[2,0],
[3,4]] )
In [38]:
A * B
Out[38]:
array([[2, 0],
[0, 4]])
In [39]:
A @ B
Out[39]:
array([[5, 4],
[3, 4]])
In [40]:
A.dot(B)
Out[40]:
array([[5, 4],
[3, 4]])
In [41]:
a = np.ones((2,3), dtype=int)
a
Out[41]:
array([[1, 1, 1],
[1, 1, 1]])
In [42]:
a *= 3
a
Out[42]:
array([[3, 3, 3],
[3, 3, 3]])
In [43]:
from numpy.random import default_rng
rg = default_rng()
b = rg.random((2,3))
b
Out[43]:
array([[0.27342757, 0.00260622, 0.45909137],
[0.14484635, 0.87284694, 0.06241388]])
In [44]:
b += a
b
Out[44]:
array([[3.27342757, 3.00260622, 3.45909137],
[3.14484635, 3.87284694, 3.06241388]])
In [45]:
# a += b # 不会自动转换为整数类型
"""
运行报错如下
UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int32') with casting rule 'same_kind'
"""
Out[45]:
"\n运行报错如下\nUFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int32') with casting rule 'same_kind'\n"
In [46]:
a = np.ones(3, dtype=np.int32)
b = np.linspace(0,pi,3)
b.dtype.name
Out[46]:
'float64'
In [47]:
c = a+b
c
Out[47]:
array([1. , 2.57079633, 4.14159265])
In [48]:
c.dtype.na