1.根据索引来获取元素
* 创建一个索引列表ind,用来装载索引,
当numpy数据是一维数据时:一个索引对应的是一个元素
具体的例子如下:
import numpy as np
x = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160])
ind1 = [3, 5, 9]
print("根据一维索引获取对应元素的值,生成一维的numpy数据:", x[ind1], x[ind1].shape)
ind2 = np.array([[0, 2],
[1, 3]])
print("根据二维索引获取对应元素的值,生成二维的numpy数据", x[ind2], x[ind2].shape)
ind3 = np.array([[0, 1],
[2, 3],
[4, 5]])
print("根据三维索引获取对应元素的值,生成三维的numpy数据", x[ind3], x[ind3].shape)
* 当numpy数据是多维数据时:一个索引对应的是一行元素,可以通过两个索引来获取第a行,第b列的元素
* 对于一个m*n维的数据,可以通过reshape来改变它的形状,变成i * j维。其中m * n = i * j
import numpy as np
x = x.reshape(4, -1) # 将数据变成4行,-1表示任意列,自动计算
row = np.array([[0, 1, 2]]) # 表示只获取第0,1,2行
print(x[row])
col = [0, 1, 2]
print("取第row行,第col列", x[row, col]) # 表示获取第(0,0),(1,1),(2,2)的数据
print(x[:2, col])
col2 = [True, False, True, True] # 表示除了第二列之外,其他的都是True,也就是说在取值时,不取false的
print(x[0:2, col2])
print('统计 x < 30的个数', np.count_nonzero(x < 30))
print(np.any(x == 50))
print(np.all(x == 50))
print(np.sum(x % 25 == 0, axis=1))
a = np.zeros(10, dtype=int)
print(a)
b = np.zeros(shape=(3, 5), dtype=float)
print(b)
c = a.reshape(2, 5)
print(c)
d = np.ones(shape=(3, 5), dtype=int)
e = np.full(shape=(3, 5), fill_value=222, dtype=float)
print(e)
f = np.arange(0, 10, 0.2)
print(f)
g = np.linspace(0, 20, 10)
print(g)
number = np.random.randint(0, 10, size=10)
number2 = np.random.randint(0, 10, size=(3, 5))
print(number2)
np.random.seed(223)
number4 = np.random.randint(0, 10, size=4)
print(number4)
num = np.random.random(size=(3, 5))
print(num)
number5 = np.random.normal(0, 1, size=(3, 5))
print(number5)
### 2.numpy的基本操作
* 主要包含对数据进行reshape,合并操作,分割操作
先讲一下一些基本知识,便于理解代码。
* 假设x是一个一维的数据,里面有100个元素,通过x.reshape(10,-1),则它会将数据变成10行,-1表示不用管它,让计算机自己计算有多少列,例如这里生成100/10=10列,==在这里要注意,我们总元素/行数=整数,才行。==
例如有100个数据,想要x = x.reshape(3,-1)是不行的,因为100/3 != 整数
* 例如x= np.array([1,1,1],[2,2,2]),
x=x[:,:]表示取所有行所有列,冒号表示取所有
import numpy as np
x = np.arange(15).reshape(3, 5)
print(x)
number = x[2, 3]
print(number)
number2 = x[:2]
print(number2)
number3 = x[:, :3]
print(number3)
number4 = x[:, ::2 ]
print(number4)
subx = x[:2, :3].copy()
num = x.reshape(5, -1)
print(num)
* 合并操作
# 合并操作
x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
a = np.concatenate([x, y])
print(a)
z = np.array([[0, 0, 0],
[1, 1, 1]])
q = np.full(shape=(2, 2), fill_value=100)
b = np.vstack([x, z]) # 在垂直方向叠加
print(b)
c = np.hstack([z, q]) # 在水平方向叠加
print(c)
* 分割操作
# 分割操作
x = np.arange(10)
x1, x2, x3 = np.split(x, [3, 7])
print(x1, x2, x3)
y2 = np.arange(16).reshape(4, 4)
v1, v2 = np.split(y2, [2], axis=0)
upper, lower = np.vsplit(y2, [2]) # np.vsplit上下对称, np.hsplit左右对称
print(upper)
### 3.矩阵的操作
import numpy as np
l = np.arange(20)
a = 2 * l
print(a)
"""求绝对值abs
正弦sin,余弦cos,正切tan
在numpy中log函数默认以e为底
log2(x)"""
print(np.log(2.7))
matrix_a = np.arange(4).reshape(2, 2)
matrix_b = np.full(shape=(2, 2), fill_value=10)
print(matrix_a * matrix_b) # 对应位置的元素相乘,但这并不符合数学上的矩阵的乘法
print(matrix_a.dot(matrix_b)) # 这个才符合矩阵的乘法
matrix_c = np.arange(6).reshape(2, 3)
print(matrix_a.dot(matrix_c))
v = np.array([1, 2])
print(v + matrix_a)
inv_a = np.linalg.inv(matrix_a)
print(inv_a)
pinx = np.linalg.pinv(matrix_a)
print(pinx)
### 4.聚合操作
import numpy as np
a = np.arange(100)
print(np.sum(a)) # sum与python中的sum在效率上快很多
print(np.max(a))
x = np.arange(16).reshape(4, 4)
print(np.sum(x, axis=0))
print(np.mean(x))
print(np.median(x))
print(np.prod(x))
print(np.std(x))
### 5. 获取索引的值
import numpy as np
x = np.random.normal(0, 1, size=10000)
print(np.argmin(x)) # 获取最小值的索引值,通过x[索引】可以查找元素
y = np.array([1, 5, 6, 8, 8, 2, 3, 9, 11])
print(np.sort(y, axis=0)) # 通过这样y不会改变顺序,如果想要改变y的话,可以用y.sort()
z = np.arange(5)
np.random.shuffle(z) # 打乱原来的排序
print(z)
print("输出的是0, 1, 2, 3, 4的索引", np.argsort(z)) # 支出最小值到最大值在z中的索引
手机扫一扫
移动阅读更方便
你可能感兴趣的文章