NumPy

  1. NumPy性能和python列表对比
  2. 创建ndarray
  3. numpy数组的运算
  4. 基本索引和切片
  5. 布尔类型索引
  6. 数组转置和轴对换

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)
  1. a:要排序的数组
  2. axis:按照排序数组的轴
  3. kind默认为“quicksort”
  4. 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏