内容
- ndarray N维数组对象
- 一些相辅相成的数学函数
- 读写
- 线性代数
- 随机数
- 傅里叶变换能力
ndarray(N-dimensional array object)
- 启动
import numpy as np
- 生成一个随机数组
该随机数组维度(shape)为2(内含3个变量)
data = np.random.randn(2,3)
data.shape
#输出该数组维度shape及内容
data.dtype
#输出该data type
data.ndim
#输出shape
- 一些运算
data + datadata * 10
- 可无限维度
data0 = np.random.randn(2,2,2,...,2)
创建N维数组nadarrays
- array函数
data1 = [6,7,8,9,10]
data2 = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(data1)
arr2 = np.array(data2)
#arr1为([6,7,8,9,10]),一个1维数组内容为5个变量
#arr2为([[1,2,3,4],[5,6,7,8]]),shape2,ndim4
- zeros与ones函数
arr3 = np.zeros(3)
arr4 = np.ones(3)
#arr3 = ([0., 0., 0.])
#arr4 = ([1., 1., 1.])
arr5 = ((3,6))
ntype为float64,在生成多维数组时需要在内多一个括号
- empty与arange函数
arr6 = np.empty((2,3))
arr7 = np.arange(10)
#arr6为不一定为0的垃圾数值,empty用于初始化
#arr7为0-10顺序的1维数值
arange参数为(2,15)时会生成一个3到14的数组,只能为int
- 类型转换函数astype
- astype会返回一个新数组,所以最好是用一个变量接收
- 属于ndarray的内函数
- float在转int时会自动截断小数
- 可以传入其他ndarray的dtype格式
arr8 = arr1.astype(float)
arr9 = arr8.astype(arr1.dtype)
数组计算
- Vectocrization(向量化)
- Element-Wise(点对点)
- 比较时(<,=,>)可得一组布尔值
- 运算两个数组处于相同的类型和维度
基本的索引和切片
在改变list上的接收的切片的new_list时上的值,只可以改变new_list上的值,但是在改变ndarray上的接收的切片的new_ndarray上的值时,不仅new_ndarray的值会改变,ndarray上原来被切片的位置的值也会被改变(个人认为,并不是有了新的变量,我更倾向于是ndarray上的切片产生了一个新的索引(“new_ndaaray”),或者是新的adarray用的原数组的地址,但这比较属于C的范畴)
- new_ndarray可以用cope()去复制自己,为了不改变原数组
- 一些切片方法
arr1_1 = arr1[1:3].copy()
arr1_1[:] = 10
arr1_1[0:2] = 11
#全部修改,broadcasted(广式转变)
- Broadcasting:提供了一种矢量阵列操作的手段,因此循环发生在 C 而不是 Python 中。它这样做时无需对数据进行不必要的复制,通常会导致高效的算法实现。然而,在某些情况下,使用它是个坏主意,因为它导致内存使用效率低下,从而减慢了计算速度。
- 多维数组访问单一元素的两个方式
print(arr2[1])
#输入为第二个列表
print(arr[0][2])
print(arr[0,2])
#两种方式
- 切片后返回的数组都是views
- 可使用复数切片或者组合切片,例:
arr8 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr8[:2,2:]