数据类型
每个Numpy的数组都是由相同类型的元素构成的网络。Numpy提供了大量数字类型,便于你创建数组。当你创建一个数组时,它会尝试猜测数据类型,但在创建数组的函数中,Numpy同样提供了可选参数便于你明确数据类型。例子如下:
import numpy as np
x = np.array([1, 2]) # 让numpy自行选择数据类型
print(x.dtype) # 输出 "int64"
x = np.array([1.0, 2.0]) # 让numpy自行选择数据类型
print(x.dtype) # 输出 "float64"
x = np.array([1, 2], dtype=np.int64) # 强制指定数据类型
print(x.dtype) # 输出 "int64"
你可以在说明文档中了解有关数据类型的全部内容
数组的运算
基础的数学运算函数对于数组均适用,且是针对数组中元素操作的;同时,它们既可以作为操作符重载使用,也可以作为函数使用。(这句没怎么看懂>_<)
(原句:Basic mathematical functions operate elementwise on arrays, and are available both as operator overloads and as functions in the numpy module:)
import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
# 元素对应求和; 两个运算均生成数组
# [[ 6.0 8.0]
# [10.0 12.0]]
print(x + y)
print(np.add(x, y))
# 元素对应作差; 两个运算均生成数组
# [[-4.0 -4.0]
# [-4.0 -4.0]]
print(x - y)
print(np.subtract(x, y))
# 元素对应相乘; 两个运算均生成数组
# [[ 5.0 12.0]
# [21.0 32.0]]
print(x * y)
print(np.multiply(x, y))
# 元素对应相除;两个运算均生成数组
# [[ 0.2 0.33333333]
# [ 0.42857143 0.5 ]]
print(x / y)
print(np.divide(x, y))
# 对每个元素求平方根; 生成数组
# [[ 1. 1.41421356]
# [ 1.73205081 2. ]]
print(np.sqrt(x))
需要注意的一点是:与MATLAB不同,*是一个元素对应相乘的运算符,不是矩阵乘法运算符。作为替代,我们使用点乘来计算向量的内积,计算一个向量和矩阵的乘法,计算矩阵之间的乘法。点乘既是numpy中的函数,也是数组对象的实例方法:
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11, 12])
# 向量内积; 结果都是219
print(v.dot(w))
print(np.dot(v, w))
# 矩阵与向量的乘法; 结果都是阶数为1的数组[29 67]
print(x.dot(v))
print(np.dot(x, v))
# 矩阵与矩阵的乘法; 结果都是阶数为2的数组
#[[19 22]
# [43 50]]
print(x.dot(y))
print(np.dot(x, y))
Numpy 提供了很多实用的函数,它们可以用于数组的计算;其中最实用的就是求和函数sum:
import numpy as np
x = np.array([[1,2],[3,4]])
print(np.sum(x)) # 对所有元素进行求和; 输出 "10"
print(np.sum(x, axis=0)) # 对每一列上的元素分别求和; 输出 "[4 6]"
print(np.sum(x, axis=1)) # 对每一行上的元素分别求和; 输出 "[3 7]"
你可以在说明文档中找到numpy提供的数学运算函数的完整列表。
除了使用数组进行数学运算,我们经常需要改变数组的形状(shape)或者对数组中的数据进行操作。有关这种操作最简单的例子就是矩阵的转置;为了转置一个矩阵,我们只需简单地使用数组对象的T属性:
import numpy as np
x = np.array([[1,2], [3,4]])
print(x) # 输出 "[[1 2]
# [3 4]]"
print(x.T) # 输出 "[[1 3]
# [2 4]]"
# 需要注意的是对一个一阶数组进行转置是无意义的:
v = np.array([1,2,3])
print(v) # Prints "[1 2 3]"
print(v.T) # Prints "[1 2 3]"
Numpy 为数组操作提供了很多有用的函数,你可以在说明文档中找到完整的列表。