numpy 数据库重点:

  • numpy的主要数据格式: ndarray

  • 列表转化为ndarray格式:  np.array()

  • np.save('x_arr', x)        # 使用save可以存一个 ndarray

  • np.savetxt('arr.csv', arr,  delimiter = ',')     # 存储为 txt 文件

  • np.array([1, 2, 5, 8, 19],  dtype = 'float32')     # 转换为ndarray格式

    • 完全不拷贝: 赋值操作:  a = b
    • 浅拷贝:  b = a.view()
    • 深拷贝: b = a.copy()
  • 调整数组形状:  arr2 = arr1.reshape(12,5)  # 形状改变,返回新数组
  • np.transpose(arr2,axes=(2,0,1))    # transpose改变数组维度 shape(4,3,6), 原shape: (3, 6, 4)
  • np.hstack((arr1,arr2))      # array([[1, 2, 3, 4, 5, 6]]) 水平方向堆叠
  • a = np.random.randint(0, 100, size = (3, 4, 5))      # 返回(3, 4, 5)形状的数组

第一部分 基本操作

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。提供多维数组对象,各种派生对象(如掩码数组和矩阵),这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。

第一节 数组的创建

1.1.1 使用np.array()

创建数组最简单的方法是使用array函数,将list格式 转换为 ndarray.

import numpy as np
l = [1, 2, 3, 4, 5]
arr = np.array(l)   # array([1, 2, 3, 4, 5])  # 将列表转换为numpy 数组

1.1.2 使用特定内置函数

我们可以利用np中的一些内置函数来创建数组,比如我们创建全0的数组,也可以创建全1数组,全是其他数字的数组,或者等差数列数组,正态分布数组,随机数。

import numpy as np
''' 生成全为1的数组 '''
arr1 = np.ones(6)    # array([1., 1., 1., 1., 1., 1.])
''' 全为0的数组 '''
arr2 = np.zeros(6)   # array([0., 0., 0., 0., 0., 0.])
''' 生成指定形状的数组 '''
arr3 = np.full(shape = [2, 3], fill_value = 5)   # array([[5, 5, 5], [5, 5, 5]])
''' 等差数列, 左闭右开 '''
arr4 = np.arange(start = 0, stop = 12, step = 2)  # array([ 0,  2,  4,  6,  8, 10])
''' linspace 线性等分向量 '''
arr5 = np.linspace(start = 0, stop = 6, num = 4)  # array([0., 2., 4., 6.])
''' 生成指定形状的随机数 '''
arr6 = np.random.randint(0, 100, size = 5)  # array([75, 20, 49, 95, 24])
''' 生成指定数量的正太分布数列 '''
arr7 = np.random.randn(5)  # array([-2.2140, -0.3328, -0.3128,  0.4067, -0.0219])
''' 生成float随机数 '''
arr8 =  np.random.random(size = 4) # array([0.93003, 0.12817, 0.93971, 0.86931])

第二节 查看操作

1.2.1 数组的状态查询

import numpy as np
arr = np.random.randint(0, 100, size = (3, 4, 5))
arr.ndim   # 数组的维度   输出 3
''' 数组的形状 '''
arr.shape  # 输出(3, 4, 5)
arr.size   # 数组的元素总量  输出 60 ( = 3*4*5)
''' 数组的元素类型'''
arr.dtype  # 输出 dtype('int64')
''' ndarray对象中每个元素的大小,以字节为单位 '''
arr.itemsize  # 输出 4   # 数据类型为int64, int为4个字节

第三节文件的 IO操作

1.3.1 保存操作

save方法保存 ndarray 到 .npy 文件,也可以使用 savez 将多个 array 保存到一个.npz 文件中

x = np.random.randn(4)    # array([-0.12666, -0.7143 , -0.10106, -0.35565])
y = np.arange(0, 6, 1)    # array([0, 1, 2, 3, 4, 5])
''' 使用save可以存一个 ndarray '''
np.save('x_arr', x)
# 使用savez 可以同时保存多个数组,保存时以key = value形式保存,读取时用key 进行读取
np.savez('some_array.npz',xarr = x, yarr = y)

1.3.2 读取操作

一般的用load方法来读取存储的数据,如果是 .npz 文件的话,读取之后相当于形成一个key-value类型的变量,通过保存时定义的 key 来获取对应的array.

np.load('x_arr.npy')  # 直接加载
np.load('some_array.npz')['yarr']

1.3.3 读写csv、txt文件

arr = np.random.randint(0, 10, size = (3, 4))
''' 存储数组到txt文件,文件后缀是txt也是一样的 '''
np.savetxt('arr.csv', arr, delimiter = ',')
# 读取txt文件, delimiter为分隔符,dtype是数据类型
np.loadtxt('arr.csv', delimiter = ',', dtype = np.int32)  

第二部分 数据类型

ndarray的数据类型:

  • int: int8、uint8、int16、int32、int64       # int8范围: (-127, 127), uint8范围:(0, 256)
  • float:float16、float32、float64
  • str        # 字符串
import numpy as np
np.array([1, 2, 5, 8, 19], dtype = 'float32')
# 输出:array([1., 2., ......19.], dtype = float32)
''' asrray 转换时指定, 可以指定数据类型 '''
arr = [1, 3, 5, 7, 2, 9, 0]
np.asarray(arr, dtype = 'float32')  # 输出:array([1., 3., 5., .... 0.])
# 数据类型转换
arr = np.random.randint(0, 10, size = 5, dtype = 'int16')
# 输出:array([6, 9, 6, 2, 3], dtype = int16)
arr.astype('float')  # 输出:array([6., 9., 6., 2., 3.])

第三部分 数组运算

3.1.1 加减乘除幂运算

import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([2, 3, 1, 5, 9])
arr1 - arr2  # 减法   array([-1, -1,  2, -1, -4])
arr1 * arr2  # 乘法   array([ 2,  6,  3, 20, 45])
arr1 / arr2  # 除法   array([0.5, 0.66666667, 3., 0.8, 0.55555556])
arr1 ** arr2 # 幂运算   array([1, 8, 3, 1024, 1953125])

3.1.2 逻辑运算

import numpy as np
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([1, 0, 2, 3, 5])
arr1 < 5   # array([ True,  True,  True,  True, False]), 输出boolean(布尔) 值
arr1 == 5   # array([False, False, False, False,  True])
arr1 == arr2   # array([ True, False, False, False,  True])
arr1 > arr2   # array([False,  True,  True,  True, False])

3.1.3 数组和标量运算

import numpy as np
arr = np.arange(1, 6)
arr   # array([1, 2, 3, 4, 5])
1 / arr   # array([1. , 0.5 , 0.33333333, 0.25 , 0.2])
arr + 5   # array([ 6,  7,  8,  9, 10])
arr * 5   # array([ 5, 10, 15, 20, 25])

3.1.4 *=、+=、-=操作

import numpy as np
arr1 = np.arange(5)   # array([0, 1, 2, 3, 4])
arr1 += 5   # array([5, 6, 7, 8, 9])
arr1 -= 5   # array([-5, -4, -3, -2, -1])
arr1 *= 5   # array([ 0,  5, 10, 15, 20])

第四部分 复制和视图

4.1.1 完全没复制

import numpy as np
a = np.random.randint(0, 100, size = (2, 3))  # array([[31 30 68],[59 20 35]])
b = a
a is b  # 返回True, a和b是两个不同名字对应同一个内存对象
b[0, 0] = 1024  # 命运共同体  array([[31 30 68], [59 20 35]])
display(a, b)   # array([[1024 30 68], [59 20 35]])

4.1.2 查看或浅拷贝

不同的数组对象可以共享相同的数据,该view方法创建一个查看相同数据的新数组对象

import numpy as np
a = np.random.randint(0, 100, size = (2, 3))
b = a.view()  # 使用a中的数据创建一个新的数据对象
a is b    # 返回false, a和b是两个不同名字对应的同一个内存对象
b.base is a      # 返回true, b视图的根数据和a一样
b.flags.owndata  # 返回false,b中的数据不是自己的
a.flags.owndata  # 返回true, a中的数据是自己的
b[0, 0] = 1024   # a,b数据都发生改变
display(a, b)    # array([[1024, 54, 82], [62, 76, 40]])

4.1.3 深拷贝

import numpy as np
a = np.random.randint(0, 100, size = (2, 3))
b = a.copy()
b is a  # 返回false
b.base is a  # 返回false
b.flags.owndata  # 返回true
a.flags.owndata  # 返回true
b[0, 0] = 1024   # b改变,a不变,分道扬镳
display(a, b)    # a: array([[22, 43, 64], [98, 48,  4]])
# b: array([[1024, 43, 64], [98, 48, 4]])

copy 应该在不在需要原来的数组情况下,切片后调用,例如,假设a是一个巨大的中间结果,而所求结果只是其中一小部分,则在b使用切片进行构造时应制作一个深拷贝:

import numpy as np
a = np.arange(1e8)  # array([0.0000000e+00, 1.0000000e+00,..., 9.9999999e+07])
# 每100万个数据中取一个数据
b = a[::10000000].copy()  # array([0., 10000000., 20000000.,..., 90000000.])
del a    # 不再需要a ,删除占大内存的a
b.shape  # (10, )

第五部分 索引、切片和迭代

5.1.1 基本索引和切片

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[5]  # 索引 输出5
arr[5:8]   # array([5, 6, 7]) # 切片输出
arr[2::2]  # array([2, 4, 6, 8]) # 从索引2开始每两个中取一个,
arr[::3]   # array([0, 3, 6, 9]) # 不写索引默认从0开始, 每3个中取一个
arr[1:7:2]  # array([1, 3, 5])  # 从1开始到索引7,左闭右开,每两个数取一个
arr[::-1]   # array([9, 8......1, 0])  # 倒序
arr[::-2]   # array([9, 7, 5, 3, 1])  # 倒序, 倒序每两个取一个值
arr[5: 8]   # array([5, 6, 7])  # 切片赋值到每个元素
temp = arr[5: 8]  # 赋值属于改了索引, 但没有复制
temp[1] = 1024
arr    # arr([0, 1, 2, 3, 4, 12, 1024, 12, 8, 9]) 

5.1.2 对于二维或高维数组

arr2d = np.array([[1, 3, 5], [2, 4, 6], [-2, -7, -9], [6, 6, 6]])
# 二维数组,shape(3, 4)
arr2d[0, -1]   # 输出5  # 索引 等于arr2d[0][-1]
arr2d[0, 2]    # 输出5
arr2d[:2, -2:]   # array([[3, 5], [4, 6]])   # 切片,同时对一维、二维切片,为二维数组
arr2d[:2, 1:]  # array([[3, 5], [4, 6]])  # 切片 正序和倒序形式,结果其实一致

5.2 花式索引和索引技巧

整数数组进行索引即花式索引, 其和切片不一样,它总是将数据复制到新数组中.

import numpy as np
#一维
arr1 = np.array([1,2,3,4,5,6,7,8,9,10])  # array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
arr2 = arr1[[1,3,3,5,7,7,7]]  # 输出: array([2, 4, 4, 6, 8, 8, 8])
arr2[-1] = 1024 # array([2, 4, 4, 6, 8, 8, 1024])  修改值,不影响arr1#二维
arr2d = np.array([[1,3,5,7,9],[2,4,6,8,10],[12,18,22,23,37],[123,55,17,88,103]])
# shape(4,5)
arr2d[[1,3]] # 获取第二行和第四行,索引从0开始的所以1对应第二行
# 输出: array([[  2,   4,   6,   8,  10],
#            [123,  55,  17,  88, 103]])arr2d[([1,3],[2,4])] # array([  6, 103])
# 相当于arr2d[1,2]获取一个元素,arr2d[3,4] 获取另一个元素
arr2d[[1,3],[2]]   # array([  6, 17])
# 选择一个区域
arr2d[np.ix_([1,3,3,3],[2,4,4])]
''' 第一个列表存的是待提取元素的行标,第二个列表存的是待提取元素的列标
输出: array([[  6,  10,  10],[ 17, 103, 103],[ 17, 103, 103],[ 17, 103, 103]])
np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系,得到(1,2),(1,4),(1,4),(3,2)的坐标'''
arr2d[[1,3,3,3]][:,[2,4,4]]    # 相当于 arr2d[np.ix_([1,3,3,3],[2,4,4])]
arr2d[([1,3,3,3],[2,4,4,2])]   # array([  6, 103, 103,  17])

5.3 boolean 值索引

names = np.array(['softpo','Brandon','Will','Michael','softpo','Will','Brandon'])
cond1 = names == 'Will'   # array([False, False,  True,... , False]) # cond1取值
names[cond1]      # array(['Will', 'Will'], dtype='<U7')
arr = np.random.randint(0,100,size = (10,8))  # 0~100随机数,形状为: 10, 8
cond2 = arr > 90  # 找到所有大于90的索引,返回数组shape(10,8),大于返回True,否则False
arr[cond2]        # array([91, 95, 91, 97, 98, 93]) 返回数据全部是大于90的

第六部分 形状操作

6.1.1 数组变形

import numpy as np
arr1 = np.random.randint(0,10,size = (3,4,5))  # 返回(3, 4, 5)形状的数组
arr2 = arr1.reshape(12,5)   # 形状改变,返回新数组, 需保证数据数量一致
arr3 = arr1.reshape(-1,5)   # -1 列的数组, 自动“整形”,自动计算

6.1.2 数组转置

import numpy as np
arr1 = np.random.randint(0,10,size = (3,5))     # shape(3,5)
arr1.T     # shape(5,3) 转置
arr2 = np.random.randint(0,10,size = (3,6,4))   # shape(3,6,4)
np.transpose(arr2,axes=(2,0,1))  # transpose改变数组维度 shape(4,3,6)

6.1.3 数组堆叠

import numpy as np
arr1 = np.array([[1,2,3]])
arr2 = np.array([[4,5,6]])
# 串联合并shape(2,3) axis = 0表示第一维串联 输出为
np.concatenate([arr1,arr2],axis = 0) # array([[1, 2, 3], [4, 5, 6]]) np.concatenate([arr1,arr2],axis = 1) # array([[1, 2, 3, 4, 5, 6]])  shape(1,6)
np.hstack((arr1,arr2)) # array([[1, 2, 3, 4, 5, 6]]) 水平方向堆叠
np.vstack((arr1,arr2)) # array([[1, 2, 3], [4, 5, 6]]) 竖直方向堆叠

6.1.4 split 数组拆分

import numpy as np
arr = np.random.randint(0,10,size = (6,5)) # shape(6,5)
np.split(arr,indices_or_sections=2,axis = 0) # 平均分成两份:shape(3, 5)+shape(3, 5)
np.split(arr,indices_or_sections=[2,3],axis = 0)
''' 在第一维(5)以索引2,3为断点分割成3份,列结果为(2, 1, 3)
[array([[1, 0, 5, 9, 6],[7, 1, 0, 1, 0]]),array([[6, 0, 8, 2, 2]]),array([[9, 5, 9, 0, 9],[2, 0, 5, 9, 4],[8, 9, 7, 8, 5]])]'''
np.vsplit(arr,indices_or_sections=3)
# 在竖直方向平均分割成3份,不能整除时报错, 类似上面的拆分结果
np.hsplit(arr,indices_or_sections=[1,4])
''' 在水平方向,以索引1,4为断点分割成3份, 以列为单元
[array([[5],[5],[8],[7],[9],[0]]),array([[7, 5, 6],[9, 8, 0],[7, 8, 7],[7, 7, 0],[2, 4, 2],[1, 6, 3]]),array([[6],[6],[6],[1],[9],[3]])]'''

第七部分 广播机制

当两个数组的形状并不相同的时候,我们可以通过扩展数组的方法来实现相加、相减、相乘等操作,这种机制叫做广播(broadcasting).

7.1.1 一维数组广播

import numpy as np
np.sort(np.array([0,1,2,3]*3))  # array([0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3])
arr1 = np.sort(np.array([0,1,2,3]*3)).reshape(4,3)   # shape(4,3)
''' array([[0, 0, 0],[1, 1, 1],[2, 2, 2],[3, 3, 3]]) '''
arr2 = np.array([1,2,3]) # array([1, 2, 3])  shape(3,)
arr3 = arr1 + arr2
''' arr2进行广播复制4份 shape(4,3)
array([[1, 2, 3],[2, 3, 4],[3, 4, 5],[4, 5, 6]])'''

7.1.2 二维数组广播

import numpy as np
# np.sort() 对数组进行排序, 默认axis = 1, (按行排序), axis = 0 时, 按列排序
arr1 = np.sort(np.array([0,1,2,3]*3)).reshape(4,3)   # shape(4,3)
arr2 = np.array([[1],[2],[3],[4]])  # array([[1],[2],[3],[4]])  shape(4,1)
arr3 = arr1 + arr2 # arr2 进行广播复制3份 shape(4,3)
'''array([[1, 1, 1],[3, 3, 3],[5, 5, 5],[7, 7, 7]])'''

7.1.3 三维数组广播

import numpy as np
arr1 = np.array([0,1,2,3,4,5,6,7]*3).reshape(3,4,2) # shape(3,4,2)
arr2 = np.array([0,1,2,3,4,5,6,7]).reshape(4,2)
# array([[0, 1],[2, 3],[4, 5],[6, 7]])  shape(4,2)
arr3 = arr1 + arr2 # arr2数组在0维上复制3份 shape(3,4,2)
'''array([[[ 0,  2],[ 4,  6],[ 8, 10],[12, 14]],[[ 0,  2],[ 4,  6],[ 8, 10],[12, 14]],[[ 0,  2],[ 4,  6],[ 8, 10],[12, 14]]])'''

第八部分 通用函数

8.1.1 通用函数:元素级数字函数

import numpy as np
arr1 = np.array([1,4,8,9,16,25])   # array([ 1,  4,  8,  9, 16, 25])
np.sqrt(arr1)    # array([1. , 2., 2.82842712, 3., 4. ,5.])  开平方
np.square(arr1)  # array([  1,  16,  64,  81, 256, 625])     平方
np.clip(arr1,2,16) # array([ 2,  4,  8,  9, 16, 16]) # np.clip :限定最大值及最小值x = np.array([1,5,2,9,3,6,8])
y = np.array([2,4,3,7,1,9,0])
np.maximum(x,y) # array([2, 5, 3, 9, 3, 9, 8])  # 返回两个数组中的比较大的值
arr2 = np.random.randint(0,10,size = (5,5))    # 0-9的随机数
'''array([[2 1 5 1 3][1 4 9 4 7][9 0 9 4 5][5 1 0 9 9][0 5 0 3 2]])'''
np.inner(arr2[0],arr2) # array([40, 76, 82, 47, 14]) 返回一维数组向量内积

8.1.2 where函数

import numpy as np
arr1 = np.array([1,3,5,7,9])
arr2 = np.array([2,4,6,8,10])
cond = np.array([True,False,True,True,False])
np.where(cond,arr1,arr2) # array([1, 4, 5, 7,10]) # True选择arr1,False选择arr2的值arr3 = np.random.randint(0,30,size = 10)
np.where(arr3 < 15, arr3, -15)     # array([6, 10, -15, 1, 14, 6, -15, 9, 7, 11])
# 小于15还是自身的值,大于15设置成-15

8.1.3 排序方法

import numpy as np
arr = np.array([9,3,11,6,17,5,4,15,1])
arr.sort()   # array([ 1,  3,  4,  5,  6,  9, 11, 15, 17]) # 直接改变原数组
np.sort(arr) # array([ 1, 3, 4, 5, 6, 9, 11, 15, 17]) # 返回深拷贝结果, 原数组不变
arr = np.array([9,3,11,6,17,5,4,15,1])
k_lst = arr.argsort() # 返回从小到大排序索引 array([8, 1, 6, 5, 3, 0, 2, 7, 4])
[arr[i] for i in k_lst]   # [1, 3, 4, 5, 6, 9, 11, 15, 17]

8.1.4 集合运算函数

A = np.array([2,4,6,8])
B = np.array([3,4,5,6])
np.intersect1d(A,B)     # array([4, 6])   # 交集
np.union1d(A,B)         # array([2, 3, 4, 5, 6, 8])  # 并集
np.setdiff1d(A,B)       # array([2, 8])  # 差集,A中有,B中没有 

8.1.5 数学和统计函数

import numpy as np
arr1 = np.array([1,7,2,19,23,5,88,11,6,11])
arr1.min()      # 返回:1  # 计算最小值
arr1.argmax()   # 返回:6  # 计算最大值的索引
np.argwhere(arr1 > 20)    # array([[4], [6]], dtype=int64)  # 返回大于20的元素索引
np.cumsum(arr1)   # array([1,8,10,29,52,57,145,156,162,173]) # 计算累加和
arr2 = np.random.randint(0,10,size = (4,5))
''' 生成shape(4, 5)的数组:
array([[0, 5, 0, 9, 3],[6, 7, 8, 0, 5],[6, 4, 3, 2, 4],[5, 2, 1, 4, 1]])'''
arr2.mean(axis = 0)    # array([4.25, 4.5, 3., 3.75, 3.25])  # 计算列的平均值
arr2.mean(axis = 1)    # array([3.4, 5.2, 3.8, 2.6])   # 计算行的平均值
np.cov(arr2, rowvar=True) '''协方差矩阵'''
'''array([[14.3 , -9.6 , -3.65,  1.2 ],[-9.6 ,  9.7 ,  2.3 , -2.65],[-3.65,  2.3 ,  2.2 ,  0.9 ],[ 1.2 , -2.65,  0.9 ,  3.3 ]])'''
np.corrcoef(arr2,rowvar=True)  '''相关性系数'''
'''array([[ 1.        , -0.81511211, -0.65074899,  0.17468526],[-0.81511211,  1.        ,  0.49788682, -0.46838506],[-0.65074899,  0.49788682,  1.        ,  0.33402133],[ 0.17468526, -0.46838506,  0.33402133,  1.        ]])'''

8.1.6 常用函数:

# 常用的函数
import numpy as np  # 导入类库 numpy
data = np.loadtxt('./iris.csv',delimiter = ',')  # 读取数据文件,data是二维的数组
data.sort(axis = -1)  # 简单排序
print('简单排序后:', data)
print('数据去重后:', np.unique(data))  # 去除重复数据
print('数据求和:', np.sum(data))       # 数组求和
print('元素求累加和', np.cumsum(data))  # 元素求累加和
print('数据的均值:', np.mean(data))    # 均值
print('数据的标准差:', np.std(data))   # 标准差
print('数据的方差:', np.var(data))     # 方差
print('数据的最小值:', np.min(data))   # 最小值
print('数据的最大值:', np.max(data))   # 最大值

第九部分 线性代数

9.1.1 矩阵乘积

#矩阵的乘积
A = np.array([[4,2,3],[1,3,1]]) # shape(2,3)
B = np.array([[2,7],[-5,-7],[9,3]]) # shape(3,2)
np.dot(A,B) # array([[ 25,  23], [ -4, -11]])  矩阵运算: A的列数和B的行数一致
A @ B       # 结果与上式一致, 符号 @ 表示矩阵乘积运算 

9.1.2 矩阵其他计算

#计算矩阵的逆
from numpy.linalg import inv,det,eig,qr,svd
A = np.array([[1,2,3],[2,3,4],[4,5,8]]) # shape(3,3)
inv(A)  # 逆矩阵
'''array([[-2.00000000e+00,  5.00000000e-01,  5.00000000e-01],[ 5.92118946e-16,  2.00000000e+00, -1.00000000e+00],[ 1.00000000e+00, -1.50000000e+00,  5.00000000e-01]])'''
det(A)  # -2.0000000000000004   # 计算矩阵行列式

01- NumPy 数据库 (数据库)相关推荐

  1. 第01章_数据库概述

    第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上 ...

  2. MySQL 01 什么是数据库(关系型数据库?)

    1.1 为什么要学数据库 JavaEE:企业级 Java 开发,主要做的是 Web 开发.(需要结合 前端 后台 数据库 三大必备技能.) 前端:页面,用来展示数据. 后台:作为一个连接点,中转站.与 ...

  3. 数据库-数据库的常用术语

    数据库-原理部分 常用的术语 数据模型 数据模型(Data model)是数据库结构的基础,是用来描述数据的一组概念和定 义,数据模型主要有三个要素:数据结构.数据操作.数据约束条件. 数据结构:对象 ...

  4. 数据库-数据库的介绍

    什么是数据库 数据库:保存数据的仓库.它体现我们电脑中,就是一个文件系统.然后把数据都保存这些特殊的文 件中,并且需要使用固定的语言(SQL语言)去操作文件中的数据. 技术定义: 数据库(Databa ...

  5. 数据库查询前十条数据_西门子PLC1200组态王-Access数据库-⑨数据库查询

    西门子PLC1200-组态王跟Access数据库--⑨数据库查询 组态王记录不同类型变量到数据库,和数据库数据查询到组态王界面 1.0 从左边栏选择表格模板,level1和level2分别设置整型和布 ...

  6. 服务器显示数据库,显示数据库服务器上的数据库数据库

    显示数据库服务器上的数据库数据库 内容精选 换一换 文档数据库服务支持开启公网访问功能,通过弹性IP进行访问.您也可通过弹性云服务器的内网访问文档数据库.要将已有的MongoDB数据库迁移到文档数据库 ...

  7. go kegg_对miRNA进行go和kegg等功能数据库数据库注释

    如果大家对go和kegg等功能数据库注释有一定了解,就应该是知道kegg其实里面就记录各个物种不到一半的蛋白编码基因功能,比如人类, 约2万个蛋白编码基因,也就七千多个是有kegg功能注释的.其它物种 ...

  8. 初学数据库---数据库设计学习

    数据库设计学习笔记 一.理解并口述(技术点和面试点) 1.数据库简介 口述1:什么是数据?(理解并掌握) 数据(Data)是描述事物的标记符号.例如: 人的身高数据是170cm, 体重数据是60kg, ...

  9. 什么是数据库?数据库的作用想学数据库必看 (1)

    1.DDL (Data Definition Language) 数据定义语言 数据定义语言 , 用来定义数据库对象:库 丶 表 丶 列等; CREATE 丶 ALTER 丶 DROP2.DML (D ...

  10. 什么是MySQL| 什么是数据库 | 数据库详解

    目录 mysql是什么 为什么要使用数据库? 我们之前存储数据的格式: 使用数据库的目的: 举例比喻 集群的概念 MySQL的特点 1) 功能强大 2) 支持跨平台 3) 运行速度快 4) 支持面向对 ...

最新文章

  1. Twisted入门教程(3)
  2. cto denalil
  3. 教你怎么样在 Java8 中优雅的避开空指针异常
  4. 安卓与ios都是linux,随便来说两句,安卓、IOS不是那么容易被取代的
  5. POJ 3241Object Clustering曼哈顿距离最小生成树
  6. 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
  7. Win10无法使用小娜搜索本地应用问题的解决方案
  8. vim“用sudo写”技巧如何工作?
  9. 达而稳 驱动 fl2000dx_Intel-AMD核显驱动没人管:Win10无法升级,不要撞车
  10. 从零开始学习makefile(8) gcc -MM的作用
  11. 800多套单片机毕业设计
  12. 微信更换绑定手机人工服务器,微信更换已绑定手机号码的操作方法
  13. AI教程:2.5D字体制作方法
  14. 论文写作:如何写论文
  15. IDEA Eval Reset 使用方法
  16. js中appendChild()方法
  17. 微信里的apk链接打不开,怎么让微信的扫一扫扫描二维码后安装apk?
  18. 企业如何选购防火墙?防火墙保护企业安全
  19. ubuntu上安装spark详细步骤
  20. vscode 提示 java 环境或路径 point to a JRE 问题

热门文章

  1. 狂神CSS3学习笔记
  2. 基于javaweb+jsp的个人日记管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
  3. Unity_安卓(Android)端AVProVideo插件播放不了视频问题解决
  4. Kaggle泰坦尼克号 数据可视化
  5. mysql if 多个,mysql if条件中的多个条件
  6. GC_CONCURRENT freed 循环不停打印日志
  7. 数据库开发-8-并发处理
  8. 微博舆情热点挖掘项目——A+项目
  9. 玛雅三维动画制作软件:Maya 2019 for Mac
  10. 非常实用的cmd命令