基础运算
a = np.array([1,2,3,4]).reshape((2,2))
b = np.arange(4).reshape((2,2))
c = a-b
d = a*b
# 矩阵对应数相乘
e1 = np.dot(a, b)
e2 = a.dot(b)
# 矩阵乘法
print(a<3)
# 可以对矩阵元素进行逻辑运算 返还ture或flose
a = np.random.random((2,4))
# np中random和平常random类似 如果random.random((2,4)) 生产2行4列,0~1之间随机数
# 如果数据已经是array 有些可以直接写成 A.sum() 和np.sum(A) 一样
a_sum = np.sum(a)
a_min = np.min(a)
a_max = np.max(a)
# 还可以只求行 或者列 最大最小 求和
a_max_c = np.max(a,axis=1)
a_max_r = np.max(a,axis=0)
# axis=1 返还每行的最大值 返还一个列表
# axis=0 返还每列的最大值 返还一个列表
print(np.argmax(a))
# a中最大值的索引值 还有 argmix
print(np.mean(a))
# a的均值
print(np.average(a))
# average平均值
print(np.median(a))
# median 中位数
print(np.cumsum(a))
# a的累加函数 结果 [ 2 5 9 14 20 27 35 44 54 65]
print(np.diff(a))
# 累差函数 每一行中后一项与前一项之差
print(np.sort(a))
# 和sort函数类似 进行一种排列
print(np.transpose(a))
print(a.T)
# 以上两种方法都是对a进行转置
print(np.clip(a,5,10))
# clip(修剪) clip(Array,Array_min,Array_max) 对于a中小于Array_min的值将其替换成Array_min,Array_max 对于超过的替换
array 的查找
a = np.arange(3,15).reshape((3,4))
print(a,'\n')
print(a[2])
# 对于矩阵索引的第一个[]就是第几行, 如上结果是a的第二行
print(a[1][1])
print(a[1,1])
# 具体到某个位置 上面结果2行2列的数 上面两种表示方式相同
print(a[1,1:4])
# 相当于切片也可以 [1:,2] 第二行的2~5列
print("---------")
for row in a:
print('\n',row)
# for循环会逐行进行打印 没有逐列打印的直接方式 可以对a转置在逐列如下
print("---------")
for col in a.T:
print('\n',col)
# 如果想迭代矩阵的所有元素,需要将其转为一行,使用 a.flat(这是一个迭代器不是array,如果想看array要 a.flatten())
print("---------")
print(a.flatten())
for item in a.flat:
print(item)
array 的赋值
# 赋值 copy
a = [1,2,3,4,5]
b = a
c = b
print(b)
print(c)
# 如果改变a的值或者b的值 所有abc 都会变化 因为如果直接 a = b 相当于a与b关联
a[1] = 10
print(a)
print(b)
# 对于只想赋值其相同值而不关联 需要 b = a.copy()
q = a.copy()
print('q', q)
a[2] = 9
print(b) # [1, 10, 9, 4, 5]
print(q) # [1, 10, 3, 4, 5]
array 合并
# 对矩阵进行合并 hstack vstack
a = np.array([1,2,3])
b = np.array([11,22,33])
print(np.vstack((a,b))) # vertical(垂直) stack
print(np.hstack((a,b))) # horizontal(水平) stack
print("---------")
# 对于一个行向量,如果用前面的转置方法(.T或transpose) 无法进行转置,因为其不是一个array
# 注意里面是()
print(a.T) # 仍然是[1 2 3]
# 方法 np.newaxis()
print("---------")
print(a[:,np.newaxis])
# 在要转置的向量后面直接加就可以,但是newaxis()不能作用于矩阵
# 多个array连接 可以还是使用vstack或者hstack 还可以使用concatenate((x,y)) 可以通过axis 选择合并的方向
# 下面两种效果一样
print(np.vstack((a,b,a)),"\n")
print(np.concatenate((a,b,a)))
array 的分割
a = np.arange(12).reshape((3,4))
print(a)
print('\n',np.split(a,2,axis=1)) #如果不写axis 默认是axis=0(矩阵上下分块)
# 有时想要不等量分割 如对于下面这个矩阵想要竖着分成三份 可以 arrary_split
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print('\n',np.array_split(a,3,axis=1))
# 但不知道如何控制想要的结果,还需要学习
# 还可以使用vsplit(垂直分割) 和hsplit 基本上用不到,上面就够了
print(np.hsplit(a,3)) # 等于 print(np.split(a,2,axis=1))
补充
# np.where 是三元表达式向量化版本,而且where第二,三个参数不需要是数组,可以是标量
a = np.array([1,2,3,4])
b = np.array([6,7,8,9])
c = np.array([True, False, True, False])
result = np.where(c,a,b) # [1, 7, 3, 9]
# 如果想要将一组数中的某些数替换成标量
a = np.random.randn(4,4)
a1 = np.where(a > 0, "a", 3) # 将a中大于0的换成a小于的换成3
a2 = np.where(a < 0, 2, a) # 只讲a中小于0的替换
# a1 [['3' '3' '3' 'a']
['a' '3' 'a' 'a']
['a' '3' 'a' 'a']
['3' 'a' 'a' 'a']]
# a2 [[2. 2. 2. 0.25344902]
[2.27838389 2. 1.44099603 1.32540036]
[0.16570196 2. 1.34380092 2.20212735]
[2. 1.15632934 2.28351864 1.68879952]]