numpy其他函数
numpy其他函数
import numpy as np
# 数组拼接
t1 = np.arange(12).reshape((2, 6))
t2 = np.arange(12, 24).reshape((2, 6))
print(t1)
print(t2)
print("*"*50)
print(np.vstack((t1, t2)))
print("*"*50)
print(np.hstack((t1, t2)))
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
[[12 13 14 15 16 17]
[18 19 20 21 22 23]]
**************************************************
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
**************************************************
[[ 0 1 2 3 4 5 12 13 14 15 16 17]
[ 6 7 8 9 10 11 18 19 20 21 22 23]]
# 交换数组的行和列
t = np.arange(12, 24).reshape((3, 4))
print(t)
print("*"*50)
# 交换行
t[[1, 2], :] = t[[2, 1], :]
print(t)
print("*"*50)
# 交换列
t[:, [0, 2]] = t[:, [2, 0]]
print(t)
print("*"*50)
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
**************************************************
[[12 13 14 15]
[20 21 22 23]
[16 17 18 19]]
**************************************************
[[14 13 12 15]
[22 21 20 23]
[18 17 16 19]]
**************************************************
现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源)。
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
us_data = np.loadtxt(us_file_path, dtype="int", delimiter=",")
uk_data = np.loadtxt(uk_file_path, dtype="int", delimiter=",")
# 可以在最左边添加一列, 为0代表美国, 为1代表英国
zeros_data = np.zeros((us_data.shape[0], 1)).astype("int")
ones_data = np.ones((uk_data.shape[0], 1)).astype("int")
us_data = np.hstack((zeros_data, us_data))
uk_data = np.hstack((ones_data, uk_data))
# 拼接两组数据
final_data = np.vstack((us_data, uk_data))
print(final_data)
[[ 0 4394029 320053 5931 46245]
[ 0 7860119 185853 26679 0]
[ 0 5845909 576597 39774 170708]
...
[ 1 109222 4840 35 212]
[ 1 626223 22962 532 1559]
[ 1 99228 1699 23 135]]
# 获取最大值和最小值的位置
t = np.arange(12).reshape((3, 4))
print(t)
# axis=0表示纵向列
print(np.argmax(t, axis=0))
# axis=1表示横向行
print(np.argmax(t, axis=1))
print(np.argmin(t, axis=1))
# 创建一个全0或全1的数组
t1 = np.zeros((3, 4))
t2 = np.ones((3,4))
print("*"*50)
print(t1)
print(t2)
# 创建一个n维单位矩阵
t3 = np.eye(3)
print("*"*50)
print(t3)
# 查看每行最大的值的位置
print(np.argmax(t3, axis=1))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[2 2 2 2]
[3 3 3]
[0 0 0]
**************************************************
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
**************************************************
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[0 1 2]
# 均匀分布, 在相同的大小范围内的出现概率是相等的
# 正态分布, 呈钟型,两头低,中间高,左右对称
# rand(d0, d1, ..., dn)
# 产生一个给定形状的数组,数组中的数值符合[0, 1)的均匀分布
print("rand")
a = np.random.rand(2, 3)
print(a)
print("*"*50)
# randn(d0, d1, ..., dn)
# 产生一个给定形状的数组,数组中的数值符合标准正态分布(均值0,方差1)
print("randn")
b = np.random.randn(2, 3)
print(b)
print("*"*50)
# randint(low, high, shape)
# 生成一个给定形状的数组,数组中的数值是从low(包含)到high(不包含)的随机整数
print("randint")
c = np.random.randint(10, 50, (2, 3))
print(c)
print("*"*50)
# uniform(low, high, size)
# 产生一个数组,数组中的数值符合[low, high)的均匀分布
print("uniform")
d = np.random.uniform(1., 2., (2, 3))
print(d)
print("*"*50)
# normal(loc, scale, size)
# 产生一个数组,数组中的数值符合以loc为均值,scale为标准差的正态分布
print("normal")
e = np.random.normal(0, 1, (2, 3))
print(e)
print("*"*50)
# seed(s)
# 设定随机数生成的种子。使用相同的种子将会产生相同的随机数序列,这对于需要可重复结果的实验非常有用
print("no seed")
a = np.random.rand(2, 3)
print(a)
a = np.random.rand(2, 3)
print(a)
print("*"*50)
print("seed")
np.random.seed(0)
a = np.random.rand(2, 3)
print(a)
np.random.seed(0)
a = np.random.rand(2, 3)
print(a)
rand
[[0.56804456 0.92559664 0.07103606]
[0.0871293 0.0202184 0.83261985]]
**************************************************
randn
[[ 0.44386323 0.33367433 1.49407907]
[-0.20515826 0.3130677 -0.85409574]]
**************************************************
randint
[[19 42 41]
[20 33 45]]
**************************************************
uniform
[[1.18633234 1.73691818 1.21655035]
[1.13521817 1.32414101 1.14967487]]
**************************************************
normal
[[-0.5409163 -1.32322737 -0.11279892]
[ 0.90734594 0.81526991 0.22909795]]
**************************************************
no seed
[[0.09928035 0.96980907 0.65314004]
[0.17090959 0.35815217 0.75068614]]
[[0.60783067 0.32504723 0.03842543]
[0.63427406 0.95894927 0.65279032]]
**************************************************
seed
[[0.5488135 0.71518937 0.60276338]
[0.54488318 0.4236548 0.64589411]]
[[0.5488135 0.71518937 0.60276338]
[0.54488318 0.4236548 0.64589411]]
# 复制与赋值
# a=b 完全不复制, a和b相互影响
# 更改a会影响b, 更改b也会影响a
b = np.arange(6)
a = b
print(a, b, sep='\n')
a[2] = 9
print(a, b, sep='\n')
b[0] = -1
print(a, b, sep='\n')
print("*"*50)
# a = b[:]是视图的操作, 是一种切片, 会创建新的对象a, 但是a的数据完全由b保管, 他们两个的数据变化是一致的
b = np.arange(6)
a = b[:]
print(a, b, sep='\n')
a[2] = 9
print(a, b, sep='\n')
b[0] = -1
print(a, b, sep='\n')
print("*"*50)
# a = b.copy() 是复制, a和b互不影响
b = np.arange(6)
a = b.copy()
print(a, b, sep='\n')
a[2] = 9
print(a, b, sep='\n')
b[0] = -1
print(a, b, sep='\n')
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 9 3 4 5]
[0 1 9 3 4 5]
[-1 1 9 3 4 5]
[-1 1 9 3 4 5]
**************************************************
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 9 3 4 5]
[0 1 9 3 4 5]
[-1 1 9 3 4 5]
[-1 1 9 3 4 5]
**************************************************
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 9 3 4 5]
[0 1 2 3 4 5]
[0 1 9 3 4 5]
[-1 1 2 3 4 5]