【CS231N】Numpy 使用入门 (3)

数据类型
每个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 为数组操作提供了很多有用的函数,你可以在说明文档中找到完整的列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值