Numpy学习

Posted Cherry_Zj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy学习相关的知识,希望对你有一定的参考价值。

Numpy学习

numpy的初步了解

1.使用numpy生成数组,得到ndarray的类型

t1 = np.array([1,2,3])
print(t1)
print(type(t1))  #<class 'numpy.ndarray'>

2. np.arange(x)方法的效果和np.array(range(x))的效果一样

t2 = np.array(range(10))
print(t2)
print(type(t2))

t3 = np.arange(10)
print(t3)
print(type(t3))

3.使用dtype可以得到数据类型

t4 = np.arange(4,10,2)
print(t4)
print(type(t4))

print(t4.dtype)

4.numpy中的数据类型


t5 = np.array(range(1,4),dtype=float)
# 或t5 = np.array(range(1,4),dtype="float")
# 或t5 = np.array(range(1,4),dtype="float32")
print(t5)
print(t5.dtype)

# numpy中的bool数据类型
t6 = np.array([0,1,1,0,1,0,0],dtype="bool")
print(t6)
print(t6.dtype)
print("//")

# 调整数据类型
t7 = t5.astype("int8")
print(t5.dtype)
print(t7.dtype)
print("***************************")
t5.dtype = "int8"
print(t5.dtype)

# numpy中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

# 修改浮点型小数位数
t8 = np.round(t7,2) #保留两位小数
print(t8)

数组的形状和运算

  1. a.shape查看数组形状
import numpy as np
t1 = np.arange(12)
print(t1)#t1:ndarray:(12,)
print(t1.shape)#输出结果:(12,)

t2 = np.array([[1,2,3],[4,5,6]])
print(t2)#t2:ndarray:(2,3)
print(t2.shape)#输出结果:(2,3)

t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)#t2:ndarray:(2,2,3)
print(t3.shape)#输出结果:(2,2,3)

2.a.reshape(3,4)修改数组形状

t4 = np.arange(12)
print(t4)
print(t4.reshape(3,4))
print(t4.reshape(3,5))#无法变成该形状的数组

t5 = np.arange(24).reshape(2,3,4)
print(t5)
print("---------------")
# t5.reshape(4,6)有返回值,不会改变t5的值
print(t5.reshape(4,6))
print("---------------")
print(t5)
print("---------------")
# 将t5变成一维数组
print(t5.reshape(24,))
print("---------------")
# 弄清如下两种情况
print(t5.reshape(24,1))
print("---------------")
print(t5.reshape(1,24))
print("#######################")

3.t5.flatten(),将t5变成一维数组
当不知道t5有多少数据时,将t5变成一维数组

#法一
t5 = np.arange(24).reshape(2,3,4)
print(t5.reshape(t5.shape[0]*t5.shape[1]*t5.shape[2],))
print("#######################")
# 法二:
print(t5.flatten())

4.数组和数的运算


#数组的运算
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(t6)
print("************************")
print(t6+2)
print("************************")
print(t6-2)
print("************************")
print(t6*2)
print("************************")
print(t6/2)
print("************************")
print(t6/0)

结果为:

5.数组和数组的运算
①情况一:

t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t7 = np.arange(100,124).reshape(4,6)
print(t7)
print("**************************")
print(t6+t7)
print("**************************")
print(t6-t7)
print("**************************")
print(t6*t7)
print("**************************")
print(t6/t7)

结果为:

②情况二:

t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t8 = np.arange(0,6)
print(t8)
print(t6)
print(t6-t8)


③情况三:

t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t9 = np.arange(4).reshape(4,1)
print(t9)
print(t6)
print(t6-t9)


④情况四:

t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t10 = np.arange(10)
print(t10)
print(t6)
# 无法计算
print(t6-t10)
print("*"*100)

numpy的索引和切片

1.取一行一列或者多行多列

import numpy as np
us_file_path = "./dataCSV/data.csv"
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)
print("*"*100)
print(t2)
print("*"*100)
# 取行
print(t2[2])
print("*"*100)
# 取连续多行
print(t2[2:])
print("*"*100)
# 取不连续多行,取第2,8,10行
print(t2[[2,8,10]])
print("*"*100)
# 取行  print(t2[行,列])
# print(t2[1,:])
# print(t2[2:,:])
# print(t2[[2,8,10],:])

# 取列
print(t2[:,0]) #取所有行第一列数据
print("*"*100)
#取连续多列
print(t2[:,2:])#取所有行第三列后的所有列数据
print("*"*100)
#取连续多列
print(t2[:,[0,2]])##取所有行第一列和第三列的数据
print("*"*100)
#取行和列,取第三行,第四列的值
a = t2[2,3]
print(a)
print(type(a))
print("*"*100)
#取多行和多列,取第三行到第五行,第二列到第四列的值(取的是行和列交叉的位置)
b = t2[2:5,1:4]
print(b)
print("*"*100)
#取多个不相邻的点
#该结果为(0,0)  (2,1)  (2,3)
c = t2[[0,2,2],[0,1,3]]
print(c)

2.行列交换

3.数组拼接

np.vstack(t1,t2)用于竖直拼接
np.hstack(t1,t2)用水平拼接

4.数组转置

转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便地去处理数据。有以下三种方法:
t.transpose()
t.swapaxes(1,0)
t.T

5.numpy读取数据


6.numpy生成随机数

7.numpy中的布尔索引

t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(t6<10)
print("*"*100)
t6[t6<10]=3
print(t6)
print("*"*100)
print(t6[t6>20])
print("*"*100)
t6[t6>20]=20
print(t6)
print("*"*100)

8.三元运算

# 三元运算
#把t6中小于等于3的替换成100,否则替换成300
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
print(np.where(t6<=3,100,300))
print("*"*100)
print(t6)
print("*"*100)

## 9.将一个数值赋值为nan
t5 = np.arange(24).reshape(2,3,4)
t6 = t5.reshape(4,6)
t6 = t6.astype(float)
t6[3,3]=np.nan
print(t6)

9.numpy中的clip

numpy中的nan和inf

numpy中的nan的注意点


处理:给nan赋均值

import numpy as np
#给nan赋均值
def fill_ndarray(t1):
    for i in range(t1.shape[1]):
        temp_col = t1[:,i]
        nan_num = np.count_nonzero(temp_col != temp_col)
        if nan_num != 0:#不为0,说明当前这列中有nan
            temp_not_nan_col = temp_col[temp_col == temp_col] #当前一列不为nan的array
            #选中当前为nan的位置,把值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
    return t1

if __name__ == '__main__':
    t1 = np.arange(12).reshape((3, 4)).astype("float")
    t1[1, 2:] = np.nan
    print(t1)
    print("*"*100)
    t1 = fill_ndarray(t1)
    print(t1)

numpy中的常用函数

numpy中的copy和view

以上是关于Numpy学习的主要内容,如果未能解决你的问题,请参考以下文章

优秀!Python神器 NumPy 登上顶刊 Nature!

无法设置从 Numpy 数组读取的适当 dtype

100天精通Python(数据分析篇)——第50天:numpy进阶

机器学习进化史:从线性模型到神经网络

Numpy学习

NumPy学习——numpy初级