人工智能系列3 Numpy的科学计算

Python 中经常会使用 Numpy 库来做科学计算。Numpy 的本质就是创建出多维数组,可使用 Numpy 提供的各种科学计算方法对数组进行计算。

多维数组的创建

import numpy as np

# 创建一维数组
arr1 = np.array([1, 2, 3])

# 创建二维数组
arr2 = np.array([[1, 2], [3, 4]])

通过 Numpy 的 array() 方法,就可以创建出多维数组。这样的数组也称之为 Numpy 对象,每个 Numpy 对象都有两个属性,一个是 shape ,另一个是 dtype 。

访问 Numpy 的 shape 属性可以获得数组的形状,示例如下:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
arr3 = np.array([[1], [2], [3]])
arr4 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

print(arr1.shape)  # (3,)
print(arr2.shape)  # (2, 3)
print(arr3.shape)  # (3, 1)
print(arr4.shape)  # (2, 2)

根据结果可知,所谓数组的形状,就是指每一维元素的个数。以 arr2 为例,这是一个二维数组,它的第一维度(行)的元素个数为 2,第二维度(列)的元素个数为 3,所以结果就是 (2, 3) 。

访问 Numpy 的 dtype 属性可以获得数组的类型,示例如下:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2, 3.2])
arr3 = np.array(['a', 5.0, 3])
arr4 = np.array([['a', 'b'], [5, 6]])

print(arr1.dtype)  # int32
print(arr2.dtype)  # float64
print(arr3.dtype)  # <U3
print(arr4.dtype)  # <U1

根据结果可知,当数组中只有整数和浮点数时,Numpy 会将整数全部转为浮点数 。当数组中存在字符串时,Numpy 会将所有元素全部转为字符串。其中,<U3、<U1 表示的就是字符串。

多维数组的访问

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(arr[0])     		# [1, 2, 3]
print(arr[1][2])  		# 6
print(arr[:, 1])  		# [2, 5, 8]
print(arr[1, :])  		# [4, 5, 6]

print(arr[:1])    		# [[1, 2, 3],
						   [4, 5, 6]]
    
print(arr[1:])    		# [[4, 5, 6],
						   [7, 8, 9]]

print(arr[:, :3:2])    # [[1, 3],
                          [4, 6],
                          [7, 9]]

对于二维数组 arr 而言,各访问方式的含义如下:

  • arr[0] 。访问数组的 第一行。
  • arr[1][2] 。访问数组的 第二行,第三列。
  • arr[:, 1] 。访问数组的 所有行,第二列。
  • arr[1, :] 。访问数组的 第二行,所有列。等价于 arr[1] 。
  • arr[:1] 。访问数组的 第 1 行 到 第 2 行。
  • arr[1:] 。访问数组的 第 2 行 到 最后一行。
  • arr[:, :3:2] 。访问数组的 所有行,第 1 列 到 最后一列,列步长为 2(步长默认为1)。

对于 n 维数组来说,访问方式如下:

arr[第一维度位置, 第二维度位置, 第三维度位置, …, 第n维度位置]

多维数组的形状处理

形状变换

Numpy 有两个较为相近的形状变换方法,分别是 reshape() 和 resize() 。

使用示例及区别如下:

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
print(arr.shape)           # (3, 3)

print(arr.reshape(1, 9))   # [[1 2 3 4 5 6 7 8 9]]
print(arr.shape)           # (3, 3)

print(arr.resize(1, 9))    # None 
print(arr.shape)           # (1, 9)

根据结果得出的区别如下表:

是否改变原数组返回值
reshape()处理之后的新数组
resize()None

降维

未完。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason说编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值