1)ndarray是N维数组对象,其中所有的元素必须是相同类型,可以对整块数据进行一些数学运算
import numpy as np
a = [1, 2, 3]
b = 3*a
c = np.array(a)*3
print(b)
print(c)
print(c+c)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
[3 6 9]
[ 6 12 18]
2)arange是python内置函数range的数组版
print(np.arange(15)) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]是数组,不是list
3) 数组切片与列表切片
a = [1, 2, 3]
b = a[:2]
b[0] = 10
print(a)
c = np.array(a)
c1 = c[:2]
c1[0] = 10
print(c)
a[:2] = [10, 2]
print(a)
[1, 2, 3]
[10 2 3]
[10, 2, 3]
通过上面的例子,可以知道ndarray切片的是视图,视图上的任何修改都会直接反映到源数组
如果想得到的不是视图,就必须进行显式操作,c1 = c[:2].copy()
4)数组索引
a[0][2] 与a[0, 2]是等价的
5)ndarray的astype方法显式地转换其dtype
调用astype无论如何都会创建一个新的数组,即使新dtyoe跟老dtype相同也如此
import numpy as np
a = np.array([3.7, -1.2, 2.6])
print(a)
a.astype(np.int)
print(a)
b = a.astype(np.int)
print(b)
[ 3.7 -1.2 2.6]
[ 3.7 -1.2 2.6]
[ 3 -1 2]
6)数组转置
import numpy as np
arr = np.arange(15).reshape((3,5))
print(arr)
b = arr.T
print(b)
print(np.dot(arr,arr.T))#求矩阵内积
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]]
[[ 30 80 130]
[ 80 255 430]
[130 430 730]]
7)通用函数
#快速元素级函数
import numpy as np
arr = np.arange(10)
print(np.sqrt(arr))#一元函数,求根
x = np.random.randn(8)
y = np.random.randn(8)
print(x)
print(y)
print(np.maximum(x,y))#二元函数,求对应的较大值
[ 0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
[-0.30646481 0.19637636 -0.24780102 -1.56935591 -0.52543323 -1.5038108
0.80716262 -1.16165569]
[-1.07482357 1.31523092 1.46381034 -0.82602134 -0.13589412 0.81393135
0.94287863 -0.49948303]
[-0.30646481 1.31523092 1.46381034 -0.82602134 -0.13589412 0.81393135
0.94287863 -0.49948303]