np.take()给定下标取出元素
np.take(c, index) c为目标数组,index为给定下标数组
np.argmax()返回数组中最大元素下标
np.argmin()返回数组中最小元素下标
np.array
import numpy as np
data = [[1,2,3,4],[2.11,1.2,2.2,3.2],[4,7,8,9],[59,68,65,85]]
arr = np.array(data)
print(arr)
np.arange 类似range
>>> np.arange(1,3,0.3)
array([ 1. , 1.3, 1.6, 1.9, 2.2, 2.5, 2.8])
import numpy as np
arr = np.arange(8)
L = arr.tolist()
print(arr)
print(type(arr))
print(type(L))
print(L)
[0 1 2 3 4 5 6 7]
<class 'numpy.ndarray'>
<class 'list'>
[0, 1, 2, 3, 4, 5, 6, 7]
ndim dim是维度(Dimension)的缩写,ndim是用来查看数组维度的。
np.shape统计数组各维度数目
import numpy as np
group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
print(group)
print(group.shape)
[[1. 1.1]
[1. 1. ]
[0. 0. ]
[0. 0.1]]
(4, 2)
数据类型转换
import numpy as np
arr1 = np.array([1,2,3,4], dtype=np.float64)
arr2 = np.array([1,2,3,4], dtype=np.int32)
arr3 = arr2.astype(np.float64)
print(arr1)
print(arr2)
print(arr3)
[ 1. 2. 3. 4.]
[1 2 3 4]
[ 1. 2. 3. 4.]
全零、全一、全空传入
import numpy as np
arr_0 = np.zeros(8)
arr_1 = np.ones((3, 8))
arr_e = np.empty((2,3,2))
print(arr_0)
print(arr_1)
print(arr_e)
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[[ 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1.]]
[[[ 2.05931344e-316 1.87072344e-316]
[ 1.85828998e-316 1.98442969e-316]
[ 1.85755284e-316 1.70134311e-316]]
[[ 1.71304417e-316 2.37875336e-316]
[ 1.84704347e-316 1.70132375e-316]
[ 2.46176627e-316 2.34552329e-316]]]
网格数据生成(进制问题)
生成二位数组
import numpy as np
a = np.arange(24).reshape((6,4))
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
flatten()可以将二位数组展平成一维数组
print(a.flatten())
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
维度转换
a.resize((3,8))
print(a)
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23]]
矩阵转置(print(arr.T)也可以)
a = np.arange(24).reshape((6,4))
print(a)
print(a.transpose())
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
[[ 0 4 8 12 16 20]
[ 1 5 9 13 17 21]
[ 2 6 10 14 18 22]
[ 3 7 11 15 19 23]]
矩阵组合()
水平组合
a = np.arange(6).reshape((2,3))
b = a * 2
print(a)
print(b)
print(np.hstack((a,b)))
[[0 1 2]
[3 4 5]]
[[ 0 2 4]
[ 6 8 10]]
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]]
垂直组合
np.vstack((a,b))
数组计算跟平常一样直接计算 arr+1 arr**2等等
np.random.rand()返回一组[0,1)均匀分布的随机样本
import numpy as np
data = np.random.rand(5,3)
print(data)
#[[0.72238004 0.58554015 0.62948194]
[0.40303003 0.93933317 0.05234182]
[0.18016946 0.06186264 0.96286429]
[0.48865234 0.8879425 0.63120916]
[0.50129112 0.70687259 0.00878837]]
import numpy as np
names = np.array(['tom','bob','bill','jack','tom'])
arr_bool = names == 'tom' print(arr_bool)
[ True False False False True]
如此判定可生成一串布尔值,可作用于维度一样的数组
print(data[arr_bool])
#[[0.72238004 0.58554015 0.62948194]
[0.50129112 0.70687259 0.00878837]]
所以布尔值可以与切片等混用
data[data<0.5]=0利用条件赋值也是可以的
data[names == ‘tom’]=0 布尔赋值也可以
print(arr[[4,3,0,6]]) 可以按自己的意愿根据给出的数组下标输出
import numpy as np
arr = np.empty((8,4))
for i in range(8):
arr[i] = i
print(arr)
print(arr[[4,3,0,6]])
[[ 0. 0. 0. 0.]
[ 1. 1. 1. 1.]
[ 2. 2. 2. 2.]
[ 3. 3. 3. 3.]
[ 4. 4. 4. 4.]
[ 5. 5. 5. 5.]
[ 6. 6. 6. 6.]
[ 7. 7. 7. 7.]]
[[ 4. 4. 4. 4.]
[ 3. 3. 3. 3.]
[ 0. 0. 0. 0.]
[ 6. 6. 6. 6.]]
在此基础上,也可以选取具体数字
import numpy as np
arr = np.arange(32).reshape(8,4)
print(arr)
print(arr[[1,5,7,2],[0,3,1,2]])
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
[ 4 23 29 10]
也可以选取行之后调整行内元素位置
import numpy as np
arr = np.arange(32).reshape(8,4)
print(arr)
print(arr[[4,3,0,6]][:,[0,3,1,2]])
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
[[16 19 17 18]
[12 15 13 14]
[ 0 3 1 2]
[24 27 25 26]]
这么做是对数组的深拷贝。
np.dot()矩阵相乘內积
np.sqrt()矩阵內元素开平方根
np.square()矩阵內元素平方
np.multiply(arr1,arr2)两矩阵相乘
print(np.subtract(arr1,arr2))两矩阵相减
np.where 条件运算
where返回的是布尔值,符合条件就返回true arr.compress(arr > 2)返回的是数组import numpy as np
arr = np.random.randn(4,4)
print(arr)
print(np.where(arr>0,2,-2))
print(np.where(arr>0,2,arr))
#满足条件执行第一个,不满足执行第二个。
[[ 0.19699344 -0.6502777 -1.03611804 -0.43403437]
[-1.95661572 0.44830588 -0.98746604 -0.57244612]
[ 0.44935834 -0.67782579 -0.49945472 -0.46147115]
[-0.26284806 -0.4260144 0.43380332 -0.04461859]]
[[ 2 -2 -2 -2]
[-2 2 -2 -2]
[ 2 -2 -2 -2]
[-2 -2 2 -2]]
[[ 2. -0.6502777 -1.03611804 -0.43403437]
[-1.95661572 2. -0.98746604 -0.57244612]
[ 2. -0.67782579 -0.49945472 -0.46147115]
[-0.26284806 -0.4260144 2. -0.04461859]]
np.where(arr>0)如果是这样的,将返回符合要求元素的下标
arr.mean()求均值
np.average(c, weights=v)加权平均值(c,v 是两个项数一样的数组,求c的平均值v为权重)
np.median()求中位数
np.diff()求后一项与前一项的差值得到比原来数组少一项的新数组
np.std()求标准差
np.log()求对数
np.var()求方差
arr.sum()求和
axis=0纵向求 axis=1横向求
例如这样arr.mean(axis=0)
累和累积不同
import numpy as np
arr = np.array([[0,1,2],[3,4,5],[6,7,8]])
print(arr.cumsum(axis=0))
print(arr.cumprod(axis=1))
[[ 0 1 2]
[ 3 5 7]
[ 9 12 15]]
[[ 0 0 0]
[ 3 12 60]
[ 6 42 336]]
布尔求和(满足条件的参与求和)
import numpy as np
arr = np.random.randn(10)
print(arr)
print((arr>0).sum())
布尔的与或运算
import numpy as np
bools = np.array([False,False,True,False])
print(bools.any())
print(bools.all())
True
False
np.loadtext()的用法
找最大值最小值以及求最大最小值之间的差异
import numpy as np
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
print(np.max(c))
print(np.min(c))
print(np.ptp(c))
181.72
155.15
26.57