对数组进行切片,b=a[2:5],修改b或a,另一个值也同时被修改。若想单纯复制,使用 b=a[2:5].copy()
a = np.arange(0,10)
b = a[2:5]
print(b)
a[3] = 90
print(b)
[2 3 4]
[ 2 90 4]
bull索引
将字符与数组对应,每一个名字可对应以行数组。~可用于取反,多个条件bull索引用 & 与 | 。
names = np.array(["bob","tom","bob","tom","sara"])
data = np.random.randn(5,3)
print(names)
print(data)
print(names =="bob")
print(data[names =="bob"])
print("****")
print(data[names!="bob"])
print("****")
print(data[~(names == "bob")])
print("****")
#使用多个布尔索引条件
a = (names=="bob")|(names=="tom")
print(data[~a])
['bob' 'tom' 'bob' 'tom' 'sara']
[[ 0.69525348 0.43568252 -0.8931784 ]
[ 2.19749435 -1.00551727 2.37792392]
[-0.73734587 -1.34906414 0.63287713]
[-0.23651394 0.41413966 0.44997678]
[ 0.2194617 0.84753193 1.64428126]]
[ True False True False False]
[[ 0.69525348 0.43568252 -0.8931784 ]
[-0.73734587 -1.34906414 0.63287713]]
****
[[ 2.19749435 -1.00551727 2.37792392]
[-0.23651394 0.41413966 0.44997678]
[ 0.2194617 0.84753193 1.64428126]]
****
[[ 2.19749435 -1.00551727 2.37792392]
[-0.23651394 0.41413966 0.44997678]
[ 0.2194617 0.84753193 1.64428126]]
****
[[0.2194617 0.84753193 1.64428126]]
转置
使用transpose会输出内存地址,swapaxes(0,1)表示使0,1轴互换
a=np.arange(6).reshape(2,3)
print(a)
print(a.T)
print(a.swapaxes(0,1))
通用函数
快速对每个元素进行操作
a = np.random.randn(2,8)
print(a)
#分别将数组的小数部分和整数部分以元组形式返回
print(np.modf(a))
#判定元素是否为空值
print(np.isnan(a))
#计算每个元素的符号值,1(正数),-1(负数),0
print(np.sign(a))
#计算每个元素的最高整数值、最小整数值
print(np.ceil(a))
print(np.floor(a))
[[-0.32992668 -0.92254005 1.03905157 0.39772345 0.27822769 0.13943396
-0.1728214 -1.48062659]
[ 2.64602861 -1.09963284 -2.21213521 1.57469212 0.70439034 -0.17716698
-0.83665894 0.71143324]]
(array([[-0.32992668, -0.92254005, 0.03905157, 0.39772345, 0.27822769,
0.13943396, -0.1728214 , -0.48062659],
[ 0.64602861, -0.09963284, -0.21213521, 0.57469212, 0.70439034,
-0.17716698, -0.83665894, 0.71143324]]), array([[-0., -0., 1., 0., 0., 0., -0., -1.],
[ 2., -1., -2., 1., 0., -0., -0., 0.]]))
[[False False False False False False False False]
[False False False False False False False False]]
[[-1. -1. 1. 1. 1. 1. -1. -1.]
[ 1. -1. -1. 1. 1. -1. -1. 1.]]
[[-0. -0. 2. 1. 1. 1. -0. -1.]
[ 3. -1. -2. 2. 1. -0. -0. 1.]]
[[-1. -1. 1. 0. 0. 0. -1. -2.]
[ 2. -2. -3. 1. 0. -1. -1. 0.]]
#大于0的个数
arr = np.random.randn(10)
print(arr)
print((arr>0).sum())
#sort函数排序,计算分位数方法
a = np.random.randn(1000)
b = np.sort(a)
c= b[int(len(a)*0.05)]
print(c)
seed
seed( ) 用于指定随机数生成时所用算法开始的整数值。
1.如果使用相同的seed( )值,则每次生成的随即数都相同;
2.如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
3.设置的seed()值仅一次有效
np.random.seed(10)
print(np.random.randn(10))
np.random.seed(10)
#若不添加上一行seed,则生成新的随机数
print(np.random.randn(10))
[ 1.3315865 0.71527897 -1.54540029 -0.00838385 0.62133597 -0.72008556
0.26551159 0.10854853 0.00429143 -0.17460021]
[ 1.3315865 0.71527897 -1.54540029 -0.00838385 0.62133597 -0.72008556
0.26551159 0.10854853 0.00429143 -0.17460021]
随机漫步
import random
import matplotlib.pyplot as plt
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step =1 if random.randint(0,1) else -1
position += step
walk.append(position)
plt.plot(walk[:100])
plt.show()
import matplotlib.pyplot as plt
import numpy as np
nsteps = 1000
draws = np.random.randint(0,2,size = nsteps)
steps = np.where(draws>0,1,-1)
walk = steps.cumsum()
plt.plot(walk)
plt.show()
where使用
xx = np.array([1,1,1,1])
yy = np.array([2,2,3,4])
zz =np.array([True,False,False,True])
result = [(x if c else y) for x,c,y in zip(xx,yy,zz)]
print(result)
re1 = np.where(zz,xx,yy)
print(re1)