NumPy
NumPy性能和python列表对比
import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))
%time for _ in range(10): my_arr2 = my_arr*2
%time for _ in range(10): my_list2 = [x*2 for x in my_list]
结果
Wall time: 16 ms
Wall time: 636 ms
创建ndarray
data1 = [1,23,4.6,2]
arr1 = np.array(data1)
arr1
data2 = [[1,2,3],
[4,5,6]]
arr2 = np.array(data2)
arr2
print(arr2.ndim)
print(arr2.shape)
np.zeros((2,3))
int_array = np.arange(10)
calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)
int_array.astype(calibers.dtype)
numpy数组的运算
arr = np.array([[1., 2., 3.],
[4., 5., 6.]])
print(arr*arr)
print(arr*arr == arr)
结果
[[ 1. 4. 9.]
[16. 25. 36.]]
[[False True True]
[ True True True]]
基本索引和切片
arr = np.arange(10)
print(arr)
print(arr[5])
arr[5:8]=12
print(arr[5:8])
print(arr)
创建一个切片后,对切片进行操作,会改变原数组中的值
arr_slice = arr[5:8]
print(arr_slice)
arr_slice[1] = 12345
print(arr)
结果:
[12 12 12]
[ 0 1 2 3 4 12 12345 12 8 9]
若想要得到的是一个副本而不是视图,需要明确arr[5:8].copy()
布尔类型索引
names = np.array(['Bob', 'Joe', 'Will', 'Joe', 'Joe'])
data = np.random.randn(5,4)
print(data)
print(names == 'Bob')
print(data[names == 'Bob'])
print(names != 'Bob')
print(data[~(names == 'Bob')])
结果:
array([[-0.72559713, 0.5021692 , -0.40538323, 1.03159213],
[ 0.72144716, 0.9853986 , -1.90579109, -0.42454087],
[-0.35674934, 0.12369675, 1.71308068, 0.61302904],
[ 0.86463033, -0.97788801, -0.07978174, -0.44386613],
[ 1.47681259, 1.09531974, -0.16154207, 1.92472807]])
array([ True, False, False, False, False])
array([[-0.72559713, 0.5021692 , -0.40538323, 1.03159213]])
array([[ 0.72144716, 0.9853986 , -1.90579109, -0.42454087],
[-0.35674934, 0.12369675, 1.71308068, 0.61302904],
[ 0.86463033, -0.97788801, -0.07978174, -0.44386613],
[ 1.47681259, 1.09531974, -0.16154207, 1.92472807]])
数组转置和轴对换
arr = np.arange(16).reshape((2,2,4))
print(arr)
arr.transpose((1, 0, 2))
结果:
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
swapaxes返回源数据的视图
print(arr.swapaxes(1,2))
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
#将条件逻辑表述为数组运算
x = np.array([1,2,3,4,5])
y = np.array([4,6,8,9,0])
cond = np.array([True,False,True,False,True])
result = np.where(cond,x,y)
print(result)
结果:
[1 6 3 9 5]
where:当cond为真则x,否则为y
#数学和统计方法
- mean 算数平均数
- std、var 标准差、方差
- argmin,argmax 最小最大元素索引
- cumsum 所有元素累计和
- cumprod 所有元素累计积
#排序
np.sort(a, axis, kind, order)
- a:要排序的数组
- axis:按照排序数组的轴
- kind默认为“quicksort”
- order:若数组包含字段,则为要排序的字段
#唯一化以及其他的集合逻辑
names = np.array([‘Bob’, ‘Joe’, ‘Will’, ‘Joe’, ‘Joe’])
print(np.unique(names))
结果:
['Bob' 'Joe' 'Will']
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2470290795@qq.com
文章标题:NumPy
文章字数:659
本文作者:runze
发布时间:2020-01-31, 10:38:27
最后更新:2020-02-01, 09:46:05
原始链接:http://yoursite.com/2020/01/31/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/NumPy/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。