Chapter3 numpy创建数组

numpy学习

学习numpy的原因

快速、方便、科学计算的科学库

什么是numpy

一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用在大型、多维数组上执行数组运算。

numpy创建数组(矩阵)

一共有三种创建的方法,如下。

#coding=utf-8
import random

import numpy as np
#创建方法一
t1=np.array([1,2,3,])
print(t1)
print(type(t1))
#创建方法二
t2=np.array(range(10))
print(t2)
print(type(t2))
#创建方法三
t3=np.arange(4,10,2)
print(t3)
print(type(t3))

数组

数组的数据类型

(1)利用dtype来判断数组的数据类型。

#coding=utf-8
import numpy as np

t3=np.arange(4,10,2)
print(t3.dtype)

(2)手动指定数组的数据类型

#coding=utf-8
import numpy as np
t4=np.array(range(1,4),dtype=float)
print(t4)
print(t4.dtype)

t5=np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(t5.dtype)

(3)调整数组的数据类型
利用 astype调整数组的数据类型。

#coding=utf-8
import numpy as np

t5=np.array([1,1,0,1,0,0],dtype=bool)

t6=t5.astype('int8')
print(t6)
print(t6.dtype)

(4)numpy中的小数

#coding=utf-8
import numpy as np

t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
t8=np.round(t7,3)
print(t8)

数组的形状

进入命令提示符,运用代码pip install ipython安装ipython,然后输入ipython来启动ipython。
(1)分类
按照维数分为:一维数组、二维数组、三维数组……

可以通过 shape来查看数组都形状

In [1]: import numpy as np

In [2]: t1=np.arange(12)

In [3]: t1
Out[3]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

In [4]: t2=np.array([[1,2,3],[4,5,6]])

In [5]: t2
Out[5]:
array([[1, 2, 3],
       [4, 5, 6]])

In [6]: t3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])

In [7]: t3
Out[7]:
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [8]: t2.shape  #对于二维数组来说,(2,3)2——指的是行数  3——指的是列数
Out[8]: (2, 3)

In [9]: t3.shape  #对于三维数组来说,(2,2,3)2——指的是块数和行数  3——指的是列数
Out[9]: (2, 2, 3)

(2)改变数组的形状
* 1:通过reshape来改变数组的形状

In [1]: import numpy as np

In [2]: t1=np.arange(12).reshape((3,4))

In [3]: t1
Out[3]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
  • 2:通过t.reshape()会直接返回结果,但是不改变原数组
In [4]: t2=np.arange(24).reshape((2,3,4))

In [5]: t2
Out[5]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

In [6]: t2.reshape((4,6))  #直接返回运行结果
Out[6]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [7]: t2  #不改变原数组
Out[7]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
  • 3:将多维数组转为一维数组
In [8]: t3=np.arange(24).reshape(4,6)

In [9]: t3
Out[9]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [10]: t3.reshape((24,))  #变一维数组,方式一
Out[10]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

In [11]: t3.reshape((24,1))  #注意区分(24,)和(24,1)
Out[11]:
array([[ 0],
       [ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10],
       [11],
       [12],
       [13],
       [14],
       [15],
       [16],
       [17],
       [18],
       [19],
       [20],
       [21],
       [22],
       [23]])

In [12]: t3.reshape((1,24)) #注意区分(24,)和(1,24),后者多了一个[]
Out[12]:
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
        16, 17, 18, 19, 20, 21, 22, 23]])

In [13]: t3.shape[0]     #行数
Out[13]: 4

In [14]: t3.shape[1]  #列数
Out[14]: 6

In [15]: t4=t3.reshape((t3.shape[0]*t3.shape[1],))  #变一维数组 方式二

In [16]: t4
Out[16]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

In [17]: t3.flatten()   #变一维数组 方式三
Out[17]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

数组的计算

(1)数组和数之间的计算
每个位置都与数之间进行计算,即使0作为除数,也不会报错,只会受到警告。

In [1]: import numpy as np

In [2]: t5=np.arange(24).reshape((4,6))

In [3]: t5
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t5+2
Out[4]:
array([[ 2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25]])
In [5]: t5*2
Out[5]:
array([[ 0,  2,  4,  6,  8, 10],
       [12, 14, 16, 18, 20, 22],
       [24, 26, 28, 30, 32, 34],
       [36, 38, 40, 42, 44, 46]])
In [6]: t5/2
Out[6]:
array([[ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5],
       [ 3. ,  3.5,  4. ,  4.5,  5. ,  5.5],
       [ 6. ,  6.5,  7. ,  7.5,  8. ,  8.5],
       [ 9. ,  9.5, 10. , 10.5, 11. , 11.5]])

In [7]: t5/0  # nan(not a number)=0/0  inf(infinite无限、无穷)=数字/0
D:\anaconda3\Scripts\ipython:1: RuntimeWarning: divide by zero encountered in true_divide
D:\anaconda3\Scripts\ipython:1: RuntimeWarning: invalid value encountered in true_divide
Out[7]:
array([[nan, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf],
       [inf, inf, inf, inf, inf, inf]])

(2)数组与数组之间的计算
* 1:完全类型的数组之间进行计算:对应位置进行计算

In [1]: import numpy as np

In [2]: t5=np.arange(24).reshape((4,6))

In [3]: t5
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t6=np.arange(100,124).reshape((4,6)) #t5和t6形状一致

In [5]: t6
Out[5]:
array([[100, 101, 102, 103, 104, 105],
       [106, 107, 108, 109, 110, 111],
       [112, 113, 114, 115, 116, 117],
       [118, 119, 120, 121, 122, 123]])
In [6]: t5+t6
Out[6]:
array([[100, 102, 104, 106, 108, 110],
       [112, 114, 116, 118, 120, 122],
       [124, 126, 128, 130, 132, 134],
       [136, 138, 140, 142, 144, 146]])
  • 2:不同类型的数组之间进行计算:注意一定会有某个维度长度一致,那么在维度相同方向上进行计算。
In [1]: import numpy as np

In [2]: t5=np.arange(24).reshape((4,6))

In [3]: t5
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t7=np.arange(0,6)

In [5]: t7
Out[5]: array([0, 1, 2, 3, 4, 5])

In [6]: t5+t7
Out[6]:
array([[ 0,  2,  4,  6,  8, 10],
       [ 6,  8, 10, 12, 14, 16],
       [12, 14, 16, 18, 20, 22],
       [18, 20, 22, 24, 26, 28]])

In [7]: t8=np.arange(4).reshape((4,1))

In [8]: t8
Out[8]:
array([[0],
       [1],
       [2],
       [3]])

In [9]: t5-t8
Out[9]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 5,  6,  7,  8,  9, 10],
       [10, 11, 12, 13, 14, 15],
       [15, 16, 17, 18, 19, 20]])

广播原则

如果两个数组的后缘维度,即从末尾开始算起的维度的轴长度相符或者其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
问题:shape为(3,3,3)的数组能和(3,2)的数组进行计算吗?否
shape为(3,3,2)的数组能和(3,2)的数组进行计算吗?能
shape为(3,3,2)的数组能和(3,3)的数组进行计算吗?能

numpy的应用

知识点:
轴(axis):对于二维数组有0、1轴;对于三维数组有0、1、2轴.

所以,计算数组的平均值,必须指定的是计算哪个方向上面的数字的平均值。

Chapter3 numpy创建数组
Chapter3 numpy创建数组

; numpy读取本地数据和索引

(1)numpy读取本地数据
np. loadtxt(frame,dtype=np.float,delimiter=None,skipprows=0,usecols=None,unpack=False)

Chapter3 numpy创建数组
有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量([“views”,”likes”,”dislikes”,”comment_total”])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作。
import numpy as np

us_file_path="./youtube_video_data/US_video_data_numbers.csv"
gb_file_path="./youtube_video_data/GB_video_data_numbers.csv"

t1=np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2=np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)

print(t1)
print(t2)

(2)numpy读取本地索引

print(t2[2]) #取行
print(t2[2:])  #取连续多行
print(t2[[0,2,3]]) #取不连续的多行

print(t2[1,:]) #逗号前面放行,后面放列,第二行
print(t2[2:,:])  #第三行及以后
print(t2[[0,2,3],:])
print(t2[:,0])  #取列,第一列

print(t2[:,2:]) #取连续的多列
print(t2[:,[0,2]]) #取不连续的多列

a=t2[2,3] #取行和列
print(a)
print(type(a))

print(t2[2:5,1:4])  #取多行多列 取3-5行,2-4列

print(t2[[0,2,2],[0,1,3]]) #取多个不相邻的点,取(0,0),(2,1),(2,3)两个点

numpy中的转置

方法一:利用 数组.transpose()

In [1]: import numpy as np

In [2]: t4=np.arange(24).reshape(4,6)

In [3]: t4
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t4.transpose()
Out[4]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

方法二:利用 数组.T

In [1]: import numpy as np

In [2]: t4=np.arange(24).reshape(4,6)

In [3]: t4
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t4.T
Out[4]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

方法三:利用 数组.swapaxes(1,0)

In [1]: import numpy as np

In [2]: t4=np.arange(24).reshape(4,6)

In [3]: t4
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t4.swapaxes(1,0)
Out[4]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

numpy数值的修改

(1)数组[条件]=a,满足条件的全部替换为a
举例:将t2中数值小于10的数字全部换为3

In [1]: import numpy as np

In [2]: t2=np.arange(24).reshape(4,6)

In [3]: t2
Out[3]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [4]: t2<10
Out[4]:
array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])

In [5]: t2[t2<10]=3

In [6]: t2
Out[6]:
array([[ 3,  3,  3,  3,  3,  3],
       [ 3,  3,  3,  3, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

(2)numpy三元运算符的操作
where(条件,a,b):满足条件的全部替换为a,不满足的替换为b
举例:将小于等于3的替换为100,其余替换为300。

In [8]:  t2=np.arange(24).reshape(4,6)

In [9]: t2
Out[9]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [10]: np.where(t23,100,300)
Out[10]:
array([[100, 100, 100, 100, 300, 300],
       [300, 300, 300, 300, 300, 300],
       [300, 300, 300, 300, 300, 300],
       [300, 300, 300, 300, 300, 300]])

(3)numpy中的clip(裁剪)
clip(a,b)将小于a的替换为a,将大于b的替换为b
举例:将小于10的数字替换为10,将大于20的数字替换为20

In [12]:  t2=np.arange(24).reshape(4,6)

In [13]: t2
Out[13]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

In [14]: t2.clip(10,18)
Out[14]:
array([[10, 10, 10, 10, 10, 10],
       [10, 10, 10, 10, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 18, 18, 18, 18, 18]])

ps:将数组中某个数值转换为nan,这时需要将数组类型转换为float类型,再进行替换。

In [12]:  t2=np.arange(24).reshape(4,6)

In [13]: t2
Out[13]:
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
In [14]: t2=t2.astype(float)

In [15]: t2[3,3]=np.nan

In [16]: t2
Out[16]:
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10., 11.],
       [12., 13., 14., 15., 16., 17.],
       [18., 19., 20., nan, 22., 23.]])

numpy中的nan和常用方法

(1)nan和inf的定义
nan(NAN,Nan):not a number表示不是一个数字
当读取本地的文件为float的时候,如果有缺失,就会出现nan
inf(-inf,+inf):infinity表示正无穷,比如一个数字除以0会出现inf
(2)nan的注意点
* 1:两个nan不相等

In [19]: np.nan==np.nan
Out[19]: False
  • 2:np.nan!=np.nan可以用来判断nan的个数或者判断nan
In [24]: t2=t2.astype(float)

In [25]: t2[3,3]=np.nan

In [26]: t2
Out[26]:
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 0.,  7.,  8.,  9., 10., 11.],
       [ 0., 13., 14., 15., 16., 17.],
       [ 0., 19., 20., nan, 22., 23.]])

In [27]: t2!=t2
Out[27]:
array([[False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False,  True, False, False]])

In [28]: np.count_nonzero(t2!=t2)
Out[28]: 1

In [29]: np.isnan(t2)
Out[29]:
array([[False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False,  True, False, False]])
  • 3:nan和任何值计算都为nan
In [30]: np.sum(t2)
Out[30]: nan

ps:计算每行或者每列的加和

In [31]: t3=np.arange(12).reshape((3,4))

In [32]: t3
Out[32]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [33]: np.sum(t3)
Out[33]: 66

In [34]: np.sum(t3,axis=0)  #按照列方向上的数总和
Out[34]: array([12, 15, 18, 21])

In [35]: np.sum(t3,axis=1)  #按照行方向上的数总和
Out[35]: array([ 6, 22, 38])
  • 4:一组数据中单纯的将nan替换为0不合适
    一般是将缺失值替换为均值(中值)或者直接删除有缺失值的一行
#coding=utf-8
import  numpy as np

def fill_ndarray(t1):
    for i in range(t1.shape[1]):#遍历每一列
        tem_col=t1[:,i]  #当前这一列
        nan_num=np.count_nonzero(tem_col!=tem_col)#计算nan的数量
        if nan_num !=0:  #不为0说明这一列中有nan
            tem_not_nan_col=tem_col[tem_col==tem_col]#当前一列不为nan的数组
            tem_col[tem_col!=tem_col]=tem_not_nan_col.mean()#选中当前为nan的位置,把值赋值为不为nan的均值
            #tem_col[np.isnan(tem_col)]=tem_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)
    t1=fill_ndarray(t1)
    print(t1)

numpy中常用统计函数

Chapter3 numpy创建数组

; 数据的拼接

数组的拼接:vstack(a,b)竖直拼接hstack(a,b)水平拼接
数组的行列交换:t[[1,2],:]=t[[2,1],:]行交换 t[:,[0,2]]=t[:,[2,0]]列交换
例题:希望将美国和英国的数据方法一起来研究,同时保留两个国家的信息。

import numpy as np
from matplotlib import pyplot as plt

us_data="./US_video_data_numbers.csv"
uk_data="./GB_video_data_numbers.csv"

#加载国家数据
us_data=np.loadtxt(us_data,delimiter=',',dtype=int)
uk_data=np.loadtxt(uk_data,delimiter=',',dtype=int)

#添加国家信息
##构造全为0的数据zeros(行,列)和全为1的数据ones(行,列)
zeros_data=np.zeros((us_data.shape[0],1)).astype(int)
ones_data=np.ones((uk_data.shape[0],1)).astype(int)
##分别添加一列全为0/1的数据
us_data=np.hstack((zeros_data,us_data))
uk_data=np.hstack((ones_data,uk_data))

#拼接两组数据
fina_data=np.vstack((us_data,uk_data))
print(fina_data)

numpy更多好用方法

(1)创建对角线为1的n阶方阵
np.eye(n) n阶方阵(对角线为1,其余位置全为0)

import numpy as np
np.eye(3)

(2)获得最大值(最小值)的位置
np.argmax(t,axis=0)最大值
np.argmin(t,axis=0)最小值

In [40]: t=np.eye(4)

In [41]: t
Out[41]:
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

In [42]: np.argmax(t,axis=0)
Out[42]: array([0, 1, 2, 3], dtype=int64)

(3)创建全是0或全是1的数组
np.zeros((3,4)) 创建全是0的3行4列数组
np.ones((3,4)) 创建全是1的3行4列数组

numpy中的随机方法

Chapter3 numpy创建数组
In [47]: np.random.randint(0,20,(3,4))
Out[47]:
array([[15,  8,  0,  6],
       [17, 17,  4, 11],
       [ 5,  2, 10,  0]])

In [48]: np.random.randint(0,20,(3,4))
Out[48]:
array([[ 2, 16,  4, 10],
       [ 5,  3, 10, 10],
       [17,  2, 10, 14]])
import numpy as np
np.random.seed(10)#使得下面随机数每次运行时都不变
t=np.random.randint(0,20,(3,4))
print(t)

小结

Chapter3 numpy创建数组

; 小练习

(1)根据美国youtube1000的评论数据来绘制直方图

import numpy as np
from matplotlib import pyplot as plt
us_file_path="./US_video_data_numbers.csv"
gb_file_path="./GB_video_data_numbers.csv"
t_us=np.loadtxt(us_file_path,delimiter=',',dtype='int')

#获取评论数据
t_us_comments=t_us[:,-1]

#绘制直方图
#先查看一下最大值和最小值,从而确定好组距
print(t_us_comments.max(),t_us_comments.min())  #582624 0
t_us_comments=t_us_comments[t_us_comments<5000]  #由于大于5000的数据特别少,所以取小于5000的数据
d=250
bin_nums=((t_us_comments.max()-t_us_comments.min())

#绘图
#设置尺寸
plt.figure(figsize=(20,8),dpi=80)
#绘制直方图
plt.hist(t_us_comments,bin_nums)

plt.show()

(2)希望了解英国youtube中视频的评论数量和喜欢数量的关系,应该如何绘图

import numpy as np
from matplotlib import pyplot as plt
us_file_path="./US_video_data_numbers.csv"
uk_file_path="./GB_video_data_numbers.csv"
t_uk=np.loadtxt(uk_file_path,delimiter=',',dtype='int')

#选取喜欢数目500000的数据(因为大于的数据很少)
t_uk=t_uk[t_uk[:,1]500000]

#提取评论数和喜欢数的数据
t_uk_comment=t_uk[:,-1]
t_uk_like=t_uk[:,1]

#定散点图尺寸
plt.figure(figsize=(20,8),dpi=80)
#绘制散点图
plt.scatter(t_uk_like,t_uk_comment)
#展示
plt.show()

Original: https://blog.csdn.net/qwertyuiop0208/article/details/124548621
Author: 桑之未落0208
Title: Chapter3 numpy创建数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/759067/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球