Python学习:numpy的使用技巧和注意

在实际操作中,我们需要需要养成习惯,任何浪费空间或者时间的操作都需要减少,因为我们操作的是大数据,可能造成灾难性的放大,使用numpy的思想,尽量减少不必要的拷贝,我们操作的对象是大数据。

# -*- coding: utf-8 -*-

# numpy是针对list操作的

import numpy as np

# 定义一个一维3个的数组

x = np.array([1,2,3])
print(x)
#%%
# 切片索引
x1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(x1)

print(x1[:,0])

#%%
# 建立0-1之间的随机矩阵
x2 = np.random.random((3,3,3))
print(x2)

#%%
print(x2[:,:,0])
#%%
# 特别需要注意切片使用
x2[:,:,0] =0
print(x2[:,:,0])
print(x2)

#%%
print(x1)
# 对第一个axis取平均值
print(np.average(x1,axis=0))
# 对第一个axis取平均值
print(np.average(x1,axis=1))

# 需要理解axis的含义,对应的是那个纬度的平均值,就是把对应的纬度压缩成1

#%%
# 将数组向量化,使用numpy计算
import time
x = np.random.random((1000,1000))
ans =np.zeros((1000,1000))
# 遍历矩阵,枚举矩阵每一行,再次枚举每一行里面的每一个元素
t = time.time()
for i,row in enumerate(x):
    for j,elem in enumerate(row):
        ans[i][j] = elem +1
print(time.time()-t)

# 使用矩阵相加
t = time.time()
ans = x+1
print(time.time()-t)
# 使用np.add计算,比第二种方法要快40倍,第一种600倍,我的这台计算机
t = time.time()
np.add(x,1,ans)
print(time.time()-t)

#0.5762310028076172
#0.04102921485900879
#0.001998424530029297

#%%
# numpy的广播,broadcasting

x = np.array([1,2,3])
y = np.array([[1,1,1],[2,2,2],[3,3,3]])

z = y-x
print(z)
print(end ='\n')

# 直接使用broadcasting实现
x =y = np.array([1,2,3])
y = np.tile(y,[3,1]).T
z = y-x
print(z)
print(end ='\n')

# 间接使用,不能直接使用y.T,只有使用y[:,None]
x =y = np.array([1,2,3])
t = y[:,None]
print(t)
z = t -x
print(z)
print(end ='\n')

# 使用numpy的思想,尽量减少不必要的拷贝,我们操作的对象是大数据

猜你喜欢

转载自blog.csdn.net/weixin_40759186/article/details/85246678