记录numpy的几种操作:形状、降维、堆叠、取子集、广播、统计学
形状
reshape只是返回改变形状后的预览状态,如使用需赋值。
resize方法的返回结果为空,但是它却真正的改变了组数的形状。
降维
# 在默认排序的情况下,优先按照数组的行顺序,逐个将元素将至一维。
print(arr.ravel())
print(arr.reshape(-1))
print(arr.flatten())
# 如果我们需要按照列的顺序把数组降到一维的话,需要把参数order设置成为"F"。
print(arr.ravel(order='F'))
print(arr.reshape(-1, order='F'))
print(arr.flatten(order='F'))
import numpy as np
arr = np.array([[1,10,100],
[2,20,200],
[3,30,300]])
print(arr)
# flatten不会改变元素值
print(arr.flatten())
arr.flatten()[0]=2000
print(arr)
# ravel方法会改变元素的值
print(arr.ravel())
arr.ravel()[0]=1000
print(arr)
# reshape方法会改变元素的值
print(arr.reshape(-1))
arr.reshape(-1)[0]=3000
print(arr)
堆叠
import numpy as np
arr1 = np.array([[1, 10, 100],
[2, 20, 200],
[3, 30, 300]])
arr2 = np.array([1, 2, 3])
#按行堆叠
print(np.vstack([arr1, arr2]))
print(np.row_stack([arr1, arr2]))
#按列堆叠
arr3 = np.array([[5], [6], [7]])
print(arr3)
print(np.hstack([arr1, arr3]))
print(np.column_stack([arr1, arr3]))
多个数组横向堆叠时,要保证行数相同,纵向合并,则要保证列数相同。
取子集
import numpy as np
arr1 = np.array([23, 12, 25])
arr2 = np.array([21, 15, 23])
# 取子集运算
# 取出arr1中元素大于arr2中的元素. 对应位置比较
print(arr1[arr1 > arr2])
# [23 25]
# 取出arr1中元素大于24中的元素
print(arr1[arr1 > 24])
# [25]
# 将arr1中所有大于24的元素改为0
print(np.where(arr1 > 24, 0, arr1))
# [23 12 0]
# 这里打印的是一个列表
print(list(0 if x > 24 else x for x in arr1))
print(np.where(arr2 > 16, 1, 0))
# [1 0 1]
广播运算
矩阵形状不同的时候,自动扩展广播。
统计学
方差np.var(arr,axis)
标准差np.std(arr,axis)