### NumPy最重要的一个特点就是其N维数组对象(即ndarray)
NumPy最重要的一个特点就是其N维数组对象(即ndarray)¶
### 该对象是一个快速而灵活的大数据集容器。
该对象是一个快速而灵活的大数据集容器。¶
In
import numpy as npdata = [2,4,1.2,34,0]# 基本类型数组array = np.array(data)print(array)# 嵌套类型数组data_qt = [[1,3,5,7],[2,4,6,8]]array_qt = np.array(data_qt)print(array_qt)print(array_qt.ndim,array_qt.shape)
[ 2. 4. 1.2 34. 0. ]
[[1 3 5 7]
[2 4 6 8]]
2 (2, 4)
…
### 除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。
除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。¶
In
print(array.dtype) # 数据类型print(array_qt.dtype)
float64
int32
…
In
## zeros和ones可以创建指定长度或维度的全0或全1数组。## empty可以创建一个没有任何具体值得数组。
…
In
zero = np.zeros((3,5)) # 创建3*5的二维数组,内容全为0print(zero)print("*"*70)empty = np.empty((2,3,4)) # 随机生成2块,3行,4列数据print(empty)
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
**********************************************************************
[[[2.62459657e+179 9.80546120e-095 1.74483681e-076 8.31856565e-072]
[1.03106710e-259 3.15474899e+180 2.38954692e+180 1.46922886e+195]
[4.82555778e+228 1.27873527e-152 6.20311190e+223 2.68212787e-110]]
[[7.07381649e+194 6.47522084e+170 2.42775961e-154 2.79660159e-152]
[1.82159989e+185 1.42853558e+248 1.87725413e-009 2.46008030e-154]
[4.83245960e+276 1.05146955e-153 6.01334434e-154 4.82595977e+276]]]
…
In
## ndarray的数据类型
…
In
print(np.array([1,2,3],dtype=np.float64))print(np.array([1,2,3],dtype=np.int32))
[1. 2. 3.]
[1 2 3]
…
In
print(array[1:3])
[4. 1.2]
…
### 如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。
如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。¶
### 例如:array[1:3].copy()
例如:array[1:3].copy()¶
## 转置
转置¶
In
num = np.random.randn(3,2)num_t = num.Tnum_dot_t = np.dot(num,num_t)print(num)print("*"*50)print(num_t)print("*"*50)print(num_dot_t)
[[ 0.66201371 -1.65036193]
[ 0.36761897 1.23633097]
[-0.56499644 -0.16034667]]
**************************************************
[[ 0.66201371 0.36761897 -0.56499644]
[-1.65036193 1.23633097 -0.16034667]]
**************************************************
[[ 3.16195667 -1.79702476 -0.10940536]
[-1.79702476 1.66365797 -0.40594496]
[-0.10940536 -0.40594496 0.34493203]]
…
In
points = np.arange(-5, 5, 0.01) #创建numpy数组,从-5~5,步长为0.01,共1000个数据xs, ys = np.meshgrid(points, points) # np.meshgrid(arg1, arg2)函数接收两个一维数组,返回二维矩阵
import matplotlib.pyplot as pltz = np.sqrt(xs ** 2 + ys ** 2)plt.imshow(z, cmap=plt.cm.gray)plt.colorbar()plt.title("Image plot of :\n{}".format(z))print("矩阵乘积:\n{}".format(z))
矩阵乘积:
[[7.07106781 7.06400028 7.05693985 ... 7.04988652 7.05693985 7.06400028]
[7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]
[7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
...
[7.04988652 7.04279774 7.03571603 ... 7.0286414 7.03571603 7.04279774]
[7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
[7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]]
…
In
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])# 根据cond的值进行选择,如果为True则保留xarr的值,否则保留yarr的值result = [(x if c else y)for x, y, c in zip(xarr, yarr, cond)]# 使用whereresult_where = np.where(cond, xarr, yarr)
print("基于if:\n{}".format(result))print("基于where:\n{}".format(result_where))print("{},{}".format(result[0], result_where[0]))
基于if:[1.1, 2.2, 1.3, 1.4, 2.5] 基于where: [1.1 2.2 1.3 1.4 2.5] 1.1,1.1
…
### np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。
np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。¶
### 在数据分析中,where通常用于根据另一个数组而产生一个新的数组。
在数据分析中,where通常用于根据另一个数组而产生一个新的数组。¶
In
arr = np.random.randn(4, 4)# arr_demo = np.random.randn(5, 4)print(arr)print("="*60)arr_new = np.where(arr > 0, 6, -6) # 正值设置为6负值设置为-6arr_new_arr = np.where(arr > 0, 6, arr) # 只将正值设置为6
print("{}\n{}".format(arr_new, arr_new_arr))
[[-1.07154786 0.75732606 1.9794616 0.66978179] [-1.04776947 0.65248274 -0.09888813 0.12076266]
[ 2.70432762 0.05325661 0.78152884 -0.4545642 ]
[-0.66935063 -0.82916227 1.07172145 0.5246802 ]]
[[-6 6 6 6]
[-6 6 -6 6]
[ 6 6 6 -6]
[-6 -6 6 6]]
[[-1.07154786 6. 6. 6. ]
[-1.04776947 6. -0.09888813 6. ]
[ 6. 6. 6. -0.4545642 ]
[-0.66935063 -0.82916227 6. 6. ]]
…
### any,all用于判断array是否全部是True
any,all用于判断array是否全部是True¶
In
bools = np.array([False, False, True, False])bool_any = bools.any()bool_all = bools.all()print("{}\n{}".format(bool_any, bool_all))
True
False
…
### unique:唯一化,自带排序
unique:唯一化,自带排序¶
In
names = np.array(['Bob','Joe','Michial','Bob','Joe','Joe'])ints = np.array([3, 2, 4, 2, 2, 3, 5, 3])
names_unique = np.unique(names)ints_unique = np.unique(ints)
print("{}\n{}".format(names_unique,ints_unique))
['Bob' 'Joe' 'Michial']
[2 3 4 5]
…
### 判断一个数组中的值在另一个数组中是否存在
判断一个数组中的值在另一个数组中是否存在¶
In
values = np.array([3, 4, 2, 3, 1, 2])if_contains_values = np.in1d(values, [1, 3, 5])print(if_contains_values)
[ True False False True True False]
…
In
…