Numpy Note

创建numpy数组

"""
从python的list中创建数组
"""
np.array([1,2,3,4])
"""
创建(3,2)全为0 float64的数组
"""
np.zeros((3,2))
"""
创建(2,4)全为1 float64的数组
"""
np.ones((2,4))
"""
创建[3,7)的int 一维数组
"""
np.arange(3,7)
"""
创建介于[0,1],5等隔分割的一维数组,
即[0.0, 0.2 , 0.4, 0.6, 0.8, 1.0]
"""
np.linspace(0,1,6)
"""
创建(2,4)随机介于[0,1)之间的float64数组
"""
np.random.random((2,4))

"""
创建介于[0,10)之间,size为(3,4)的float数组
"""
random_numbers = np.random.uniform(low=0, high=10, size=(3, 4))
print(random_numbers)

"""
创建数组时指定元素类型
"""
a=np.zeros((4,2),dtype=np.int32)

"""
创建指定形状的数组
"""
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ones_array = np.ones_like(a)
print(ones_array)
获取numpy形状
a=np.array([[1,2,3,4],[5,6,7,8]])
a.shape
修改numpy数组
"""
修改类型
"""
a=np.array([[1,2,3,4],[5,6,7,8]])
b=a.astype(np.float64)


"""
修改形状使用reshape或者view

reshape为创建一个新张量,view为共享原张量,使用-1自动推断大小
"""
import torch

# 创建一个形状为 (2, 3) 的张量
x = torch.tensor([[1, 2, 3],
                  [4, 5, 6]])

print("原始张量形状:", x.shape)
# 输出:原始张量形状: torch.Size([2, 3])

# 使用 view 将其重塑为形状 (3, 2)
y = x.view(3, -1)

print("重塑后的张量形状:", y.shape)
# 输出:重塑后的张量形状: torch.Size([3, 2])

print("重塑后的张量:\n", y)
# 输出:
# 重塑后的张量:
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])

"""
np的squeeze函数和torch的unsqueeze函数

np.squeeze:从数组的形状中删除单维度条目,即把shape中为1的维度去掉,相当于减少维度

torch中的unsqueeze:通过unsuqeeze(int)中的int整数,增加一个维度,int整数表示维度增加到哪儿去,且维度为1。
"""
c  = np.arange(10).reshape(1,2,1,5)
c=np.squeeze(c)
c.shape
#(2,5)


c=torch.Tensor(np.random.random((4,5)))
c=c.unsqueeze(1) #增加选择(0,1,2)三个位置都可以,这里选择增加到1
c.shape
#(4,1,5)
numpy数组运算
"""
直接对数组乘5,所有元素标量乘5
"""
a=np.array([1,2,3])
a=a*5

"""
形状相同的numpy数组,可以直接进行标量加减乘除
"""
a=np.array([1,2,3])
b=np.array([4,5,6])
a+b
a/b
a*b


"""
(a,b)和(b,c)形状的numpy数组,可以用dot或者@或者np.matmul()返回
矩阵乘法结果
"""
a=np.array([[1,2,3],[4,5,6]]) #2*3
b=np.array([[3],[4],[5]])  #3*1
a.dot(b)

result:
1,62
0,26
numpy常用函数
np.sqrt(a),对所有数求平方根
np.sin(a),求sin
np.cos(a),求cos
np.log(a),求对数
np.power(a,x),求指数
np.median(a),求中位数
np.random.rand(),生成[0,1)之间随机数


a.min(),最小值
a.max(),最大值
a.argmin(),最小值索引
a.argmax(),最大值索引
a.sum(),求和
a.sum(axis=0),求每一行的元素求和返回
a.mean(),求平均值
a.var(),求方差
a.std(),求标准差
numpy获取指定元素
a=np.random.uniform(0,10,10).reshape(2,5).astype(int)
"""
与python列表相同获取i,j位置的元素,或者切片
"""
a[1][2]
a[0,0:2]
a[::-1]
"""
返回a中小于3且%2不等于0的元素
"""

a[(a<3) & (a%2!=0)]

"""
从numpy数组中根据概率随机选取若干数
"""
# 设置权重数组,权重必须归一化(总和为1)
weights = np.array([0.1, 0.2, 0.3, 0.4, 0.0])

# 根据权重随机选择一个元素
choice = np.random.choice(arr, p=weights,size=2)
print(choice)

"""
numpy.digitize(x,bins)

返回一个和x形状相同的数据,返回值中的元素为对应x位置的元素落在bins中区间的索引号。
"""
x = np.array([-1,0.2, 6.4, 3.0, 1.6,12])
bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])
inds = np.digitize(x, bins)
inds
array([0, 1, 4, 3, 2, 5])


numpy和pandas,torch的转换
"""
Pandas的DataFrame或者Series转numpy数组
"""
df = pd.DataFrame(data=[[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])
print(df)
#    a  b  c
# 0  1  2  3
# 1  4  5  6

a = df.to_numpy()
print(a)
# [[1 2 3]
#  [4 5 6]]

"""
numpy转Pandas的Dataframe和Series直接当做多维数组即可
"""

#numpy转Series
a = np.arange(4)
print(a)
# [0 1 2 3]

s = pd.Series(a)
print(s)
# 0    0
# 1    1
# 2    2
# 3    3
# dtype: int64

#numpy转Dataframe
index = ['A', 'B', 'C', 'D']
name = 'sample'
s = pd.Series(data=a, index=index, name=name, dtype='float')
print(s)
# A    0.0
# B    1.0
# C    2.0
# D    3.0
# Name: sample, dtype: float64
print(type(a))
# 

"""
torch的tensor转numpy
"""
import torch
x = torch.ones(5) # 创建张量x
# tensor([1., 1., 1., 1., 1.])
x_ = x.detach().numpy() # 转换,使用detach()不计算张量
# array([1., 1., 1., 1., 1.], dtype=float32)

"""
numpy转tensor
"""
x=np.ones((3,4))
type(x)
#numpy.ndarray 
x=torch.tensor(x) # 深拷贝
x=torch.from_numpy(x) #浅拷贝,共享numpy数组
type(x)
#torch.Tensor

你可能感兴趣的:(numpy)