numpy 基础学习

1.基础运算

对于np的很多计算,如max,mean,min,cumsum函数都有一个axis属性,当axis等于0时对于列计算,等于1时对于行计算

for example, min函数

import numpy as np

A = np.array(range(14, 2, -1)).reshape(3, 4)
print(A)
print('------------')
print(np.min(A, axis=0))
print(np.min(A, axis=1))

结果

 累加 cumsum()

import numpy as np
A = np.array(range(2,14)).reshape(3,4)
print(A)
print(np.cumsum(A))

结果:

累差:diff()

import numpy as np
A = np.array(range(2,14)).reshape(3,4)
print(A)
print(np.diff(A))

结果:

非零项 nonezero()

import numpy as np
A = np.array(range(2,14)).reshape(3,4)
print(A)
print(np.nonzero(A))

他会输出由两个列表构成的元组,表示非零元素的位置。在这个例子中第一个列表是非零项的行数,第二个列表是非零项的列数

排序 sort()

import numpy as np
A = np.array(range(14,2,-1)).reshape(3,4)
print(A)
print(np.sort(A))

结果:

转置 transpose() 或者 array的T属性

import numpy as np
A = np.array(range(14,2,-1)).reshape(3,4)
print(A)
print(np.transpose(A))
print(A.T)

clip():

import numpy as np

A = np.array(range(14, 2, -1)).reshape(3, 4)
print(A)
print(np.clip(A, 5, 9))

clip函数把A中小于5的变成都赋值成5,把大于9的赋值成9

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 2.索引

import numpy as np

A = np.arange(3,15).reshape(2,3,2)
print(A)
print(A[0][1])
print(A[0,1])

结果:

这两种方式输出了同样结果

第零行 第一到第二的值

import numpy as np

A = np.arange(3,15).reshape(2,3,2)

print(A[0][1:2])
print(A[0,1:2])

结果:

 遍历

行可以直接用for语句进行迭代,列可以迭代向量的转置,迭代所有元素可以用flat属性

import numpy as np

A = np.arange(3,15).reshape(2,3,2)

#行迭代
for i in A:
    print(i)

#列迭代
for i in A.T:
    print(i)

#迭代所有元素
for i in A.flat:
    print(i)

合并:

1.vstack和hstack

import numpy as np

A = np.array([1, 1, 1])
B = np.array([2, 2, 2])

V = np.vstack((A, B))  #vertical stack 上下合并
H = np.hstack((A,B))  #horizontal stack 左右合并
print(A.shape)
print(V.shape)
print(H.shape)

2.concatenate 合并可以进行多个数列的合并

import numpy as np

A = np.array([1, 1, 1])[:,np.newaxis]
B = np.array([2, 2, 2])[:,np.newaxis]

C = np.concatenate((A,B),axis=1)
print(C)

需要注意的是, concatenate 要用在二维数据,所以如果上面代码中没有加上[:,np.newaxis]的话或出现下面错误

这就是因为没有增加维度的向量是一维的,只有长而没有宽,无法进行vertical合并

增加维度 np.newaxis 、reshape:

import numpy as np

A = np.array([1, 1, 1])
A_T = A.T
print(A.shape)
print(A_T.shape)
print(A.reshape(3,1).shape)
print(A[:,np.newaxis].shape)

可以看到numpy中的转置并没有把原来一行的数列转化成一列的数列

我们可以通过reshape 或者 使用[:,np.newaxis]增加维度

分割

np.split() 

import numpy as np

A = np.array(range(12)).reshape(3, 4)
print(np.split(A, 3, axis=0))
print(np.split(A, 2, axis=1))

其中axis默认为0,也就是按照行分

np.array_spilit()

与split唯一不同的是,array_split()可以不等分,如下:

import numpy as np

A = np.array(range(12)).reshape(3, 4)
print(np.array_split(A, 3, axis=1))

分成了1 1 2 的形式

 当然还可以用vsplit hsplit 这里就不赘述了

深度复制

numpy中的向量和python中的列表一样,一般的copy只是多了一个引用而已,所以需要copy()

import numpy as np

A = np.array(range(6))
B = A
C = A.copy()
A[0] = -1
print(A)
print(B)
print(C)

可以看到当A发生变化之后B也随之改变,而通过deep copy得到的C没有改变

原文地址:https://www.cnblogs.com/francischeng/p/9739144.html