当前位置: 首页 > 编程日记 > 正文

Numpy学习笔记(下篇)

目录

  • Numpy学习笔记(下篇)
    • 一、Numpy数组的合并与分割操作
    • 1、合并操作
      • 2、分割操作
    • 二、Numpy中的矩阵运算
      • 1、Universal Function
      • 2、矩阵运算
      • 3、向量和矩阵运算
    • 三、Numpy中的聚合操作
    • 四、Numpy中的arg运算
      • 1、索引操作
      • 2、排序和索引使用
    • 五、Fancy Indexing
    • 六、Numpy.array的比较
    • 我是尾巴

Numpy学习笔记(下篇)


路漫漫其修远兮,吾将上下而求索!Numpy学习笔记(上篇)

一、Numpy数组的合并与分割操作

​ 在机器学习算法的使用中会经常使用这两种操作。

1、合并操作

import numpy as np
x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
z = np.array([666, 666, 666])
  • np.concatenate([,], axis=) 默认axis=0,拼接之后返回的是一个新的数组。不改变原有数组。
np.concatenate([x, y])

运行输出结果:array([1, 2, 3, 3, 2, 1])

np.concatenate([x, y, z])

运行输出结果:array([ 1, 2, 3, 3, 2, 1, 666, 666, 666])

​ 上面是对一维数组的拼接,接下来看看二维的。

A = np.array([[1, 2, 3],[4, 5, 6]])    # A.shape=(2,3),从第一个维度上拼接就是(4,3)
np.concatenate([A, A])

运行输出结果:

array([[1, 2, 3],[4, 5, 6],[1, 2, 3],[4, 5, 6]])
np.concatenate([A, A], axis=1)      # 从第二个维度上拼接就是(2,6)

运行输出结果:

array([[1, 2, 3, 1, 2, 3],[4, 5, 6, 4, 5, 6]])

​ 那么,能不能把A和z拼接到一起呢?显然是不能的,因为z是1维数组,而A是2维数组,运行会报错。z.shape=(3,),此时我们就可以使用reshape操作将其先装换为2维数组,然后再进行拼接。

np.concatenate([A, z.reshape(1, -1)])

运行输出结果:

array([[  1,   2,   3],[  4,   5,   6],[666, 666, 666]])

​ 其实,在numpy中已经封装好了一个函数用来解决不同维度之间的合并问题。

  • np.vstack()
np.vstack([A, z])

运行输出结果:

array([[  1,   2,   3],[  4,   5,   6],[666, 666, 666]])
  • np.hstack()
B = np.full((2, 2), 100)
np.hstack([A, B])
array([[  1,   2,   3, 100, 100],[  4,   5,   6, 100, 100]])

2、分割操作

  • np.split(x, [,], axis=)

    第一个参数是分割对象,第二个参数是分割点,且分割点可以不唯一。axis默认是0

x = np.arange(10)
x

运行输出结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.split(x, [3, 7])

运行输出结果:[array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])]

​ 同样的,接下来试一下二维数组。

A = np.arange(16).reshape(4, 4)
A

运行输出结果:

array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])
np.split(A, [3])

运行输出结果:

[array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]
np.split(A, [3], axis=1)

运行输出结果:

[array([[ 0,  1,  2],[ 4,  5,  6],[ 8,  9, 10],[12, 13, 14]]), array([[ 3],[ 7],[11],[15]])]

​ 其实,在numpy中既然有垂直水平拼接,那就有垂直水平分割。

  • np.vsplit()
np.vsplit(A, [3])

运行输出结果:

[array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]
np.hsplit(A, [3])

运行输出结果:

[array([[ 0,  1,  2],[ 4,  5,  6],[ 8,  9, 10],[12, 13, 14]]), array([[ 3],[ 7],[11],[15]])]

​ 通过以上对比可以发现:其实vsplit就是split的axis=0的时候,而hsplit就是split的axis=1的时候!

​ 那么接下来做一个简答的小练习,现在有下面一组数据,前三列为数据,最后一列为样本标签,此时我们需要将其分割开来,同时把标签(最后一列)转换为向量:

array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])

data = np.arange(16).reshape(4, 4)
x, y = np.hsplit(data, [-1])

运行输出结果:

array([[ 0,  1,  2],[ 4,  5,  6],[ 8,  9, 10],[12, 13, 14]])
array([[ 3],[ 7],[11],[15]])

​ 接下来需要把array转换为向量。

y[:, 0]

运行输出结果:array([ 3, 7, 11, 15])

二、Numpy中的矩阵运算

​ 现在有这么一个问题:给定一个向量,让向量中的每一个元素乘以2,a=(0,1,2),a*2=(0,2,4)

L = [i for i in range(10)]
L * 2

运行输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

​ 显然这不是我们想要的结果。那么想要实现怎么办呢?

A = []
for i in L:A.append(i * 2)
A

运行输出结果:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

​ 这肯定不是最优的办法,下面就来对比几种实现方式的快慢。

%%time
L = [i for i in range(100000)]
A = []
for i in L:A.append(i * 2)
A

运行输出结果:Wall time: 14.6 ms

%%time
L = [i*2 for i in range(100000)]

运行输出结果:Wall time: 6.83 ms

%%time
import numpy as np
A = np.array(i*2 for i in range(100000000000000))
A
%%time
L = np.arange(10)
L * 2
L

运行输出结果:Wall time: 0 ns

​ 为什么是0呢?其实因为A返回的是一个生成器,无论后面有多大的的数都是一样的。这就是numpy在大数据运算中的优势所在。关于生成器。

import numpy as np
L = np.arange(10)
L * 2

运行输出结果:array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

1、Universal Function

X = np.arange(1, 16).reshape(3, 5)
X

运行输出结果:

array([[ 1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10],[11, 12, 13, 14, 15]])
  • 加法
X + 1

运行输出结果:

array([[ 2,  3,  4,  5,  6],[ 7,  8,  9, 10, 11],[12, 13, 14, 15, 16]])
  • 减法
array([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14]])
  • 乘法
X * 2

运行输出结果:

array([[ 2,  4,  6,  8, 10],[12, 14, 16, 18, 20],[22, 24, 26, 28, 30]])
  • 除法
X / 2

运行输出结果:

array([[0.5, 1. , 1.5, 2. , 2.5],[3. , 3.5, 4. , 4.5, 5. ],[5.5, 6. , 6.5, 7. , 7.5]])
X // 2

运行输出结果:

array([[0, 1, 1, 2, 2],[3, 3, 4, 4, 5],[5, 6, 6, 7, 7]], dtype=int32)
  • 取余
X % 2

运行输出结果:

array([[1, 0, 1, 0, 1],[0, 1, 0, 1, 0],[1, 0, 1, 0, 1]], dtype=int32)
  • 倒数——1/X
  • 绝对值——np.abs()
  • 正弦函数——np.sin()
  • 余弦函数——np.cos()
  • 正切函数——np.tan()
  • 同样还有反正弦、反余弦、反正切等等。
  • 指数函数——np.exp()
  • np.power()
  • np.log()
  • np.log2()
  • np.log10()

2、矩阵运算

A = np.arange(4).reshape(2, 2)
B = np.full((2, 2), 10)
  • A+B

  • A-B

  • A*B

  • A/B

    ​ 以上方法都是对应元素进行相应操作,那么如果需要进行矩阵乘法怎么办?

  • 矩阵乘法——np.dot()

A.dot(B)

运行输出结果:

array([[10, 10],[50, 50]])
  • 矩阵转置
A.T

运行输出结果:

array([[0, 2],[1, 3]])
  • 矩阵的逆——np.linalg.inv()
np.linalg.inv(A)

运行输出结果:

array([[-1.5,  0.5],[ 1. ,  0. ]])
np.linalg.inv(A).dot(A)

运行输出结果:

array([[1., 0.],[0., 1.]])

​ 这也验证了A*A[^-1]=E

  • 矩阵的伪逆——np.linalg.pinv()

    很多情况下,我们的矩阵可能不是一个方阵,那么此时正常情况下我们是无法求得矩阵的逆的。但是可以求得伪逆矩阵。

C = np.arange(0, 16).reshape(2, 8)
C = np.arange(0, 16).reshape(2, 8)

运行输出结果:

array([[-1.35416667e-01,  5.20833333e-02],[-1.01190476e-01,  4.16666667e-02],[-6.69642857e-02,  3.12500000e-02],[-3.27380952e-02,  2.08333333e-02],[ 1.48809524e-03,  1.04166667e-02],[ 3.57142857e-02, -1.04083409e-17],[ 6.99404762e-02, -1.04166667e-02],[ 1.04166667e-01, -2.08333333e-02]])
C.dot(np.linalg.pinv(C))

运行输出结果:

array([[ 1.00000000e+00, -2.49800181e-16],[ 0.00000000e+00,  1.00000000e+00]])

​ 通过上述结果可以发现,近似单位矩阵说明求得是伪逆矩阵,近似得到的。具体伪逆矩阵的详细求解自行百度!

3、向量和矩阵运算

A = np.arange(4).reshape(2, 2)
v = np.array([1, 2])
  • v+A
v + A

运行输出结果:

array([[1, 3],[3, 5]])
np.vstack([v] * A.shape[0])

运行输出结果:

array([[1, 2],[1, 2]])
np.vstack([v] * A.shape[0]) + A

运行输出结果:

array([[1, 3],[3, 5]])

​ 此时,可以发现两者得到的结果是相同的。其实在pyhon中已经封装了堆叠的函数

  • np.tile()
np.tile(v, (2, 1))

运行输出结果:

array([[1, 2],[1, 2]])
np.tile(v, (2, 1)) + A

运行输出结果:

array([[1, 3],[3, 5]])
  • v *A
v * A

运行输出结果:

array([[0, 2],[2, 6]])
  • A.dot(v)
A.dot(v)

运行输出结果:array([2, 8])

  • v.dot(A)
v.dot(A)

运行输出结果:array([4, 7])

三、Numpy中的聚合操作

import numpy as np
L = np.random.random(100)

运行输出结果:

array([0.21395159, 0.90268106, 0.88705369, 0.11517909, 0.62676208,0.56121013, 0.62103571, 0.2418181 , 0.13781453, 0.66670862,0.51939238, 0.99679432, 0.06384017, 0.5974129 , 0.22196488,0.93826983, 0.83706847, 0.63491905, 0.48828241, 0.85424059,0.86514318, 0.47937265, 0.34254143, 0.89577197, 0.14823176,0.94488872, 0.57030248, 0.57643624, 0.08268558, 0.8237711 ,0.21887705, 0.46440547, 0.9338367 , 0.132422  , 0.4867988 ,0.6545799 , 0.36226663, 0.01641314, 0.67876507, 0.35811434,0.36533195, 0.12174504, 0.37477359, 0.98791281, 0.20553232,0.65235494, 0.13567244, 0.92317556, 0.82237976, 0.62747037,0.41160535, 0.46839494, 0.06753446, 0.22386476, 0.20821765,0.11778734, 0.8643039 , 0.77497708, 0.9884161 , 0.65142779,0.2374325 , 0.32467954, 0.81959546, 0.9863651 , 0.54072234,0.21293241, 0.92733881, 0.98738362, 0.90565471, 0.23441948,0.05477787, 0.69157053, 0.49194796, 0.12415383, 0.55427813,0.29040539, 0.20166942, 0.30054924, 0.30772375, 0.90932004,0.84668024, 0.51970052, 0.67773186, 0.37401172, 0.43911304,0.98495573, 0.42493635, 0.83658015, 0.35920119, 0.91977698,0.95094167, 0.03354397, 0.92045222, 0.80083071, 0.03480189,0.22378161, 0.21437509, 0.33268728, 0.51601075, 0.61235958])
  • 求和——np.sum()
sum(L)

运行输出结果:52.28029464862967

np.sum(L)

运行输出结果:52.28029464862967

​ 那么这两者有什么不一样呢?其实就是单纯的效率上不一样。

  • 最小值——np.min()
np.min(L)

运行输出结果:0.016413139615859218

  • 最大值——np.max()
np.max(L)

运行输出结果:0.9967943174823842

​ 接下来,试一下二维数组。

X = np.arange(16).reshape(4, -1)
X

运行输出结果:

array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])
np.sum(X)

运行输出结果:120

​ 但是,很多时候我们并不是需要将所有的数进行求和,而是只需要求每一行或者每一列的和。

np.sum(X, axis=0)

运行输出结果:array([24, 28, 32, 36])

np.sum(X, axis=1)

运行输出结果:array([ 6, 22, 38, 54])

​ 在这里,放一个小技巧,axis=0其实就是要把行压缩掉,那就是说不管有多少行直接压缩为一行,那也就是将每一行放在一起求和,axis=1其实就是把列压缩掉,最终的结果就是每一行出一个数。因为按行求和和按列求和记起来其实并不是那么方便。

  • 累乘——np.prod()
np.prod(X)

运行输出结果:0

np.prod(X + 1)

运行输出结果:2004189184

  • 均值——np.mean()
np.mean(X)

运行输出结果:7.5

  • 中位数——np.median()
np.median(X)

运行输出结果:7.5

  • 百分位——np.precentile()
X = np.arange(16).reshape(4, -1)
for percent in [0, 25, 50, 75, 100]:print(np.percentile(X, q=percent))

运行输出结果:

0.0
3.75
7.5
11.25
15.0
  • 方差——np.var()
np.var(X)

运行输出结果:21.25

  • 标准差——np.std()
np.std(X)

运行输出结果:4.6097722286464435

四、Numpy中的arg运算

1、索引操作

  • np.argmin() # 最小值所在位置的索引
  • np.argmax() # 最大值所在位置的索引

2、排序和索引使用

# 首先生成一个乱序数组
import numpy as np
x = np.arange(16)
np.random.shuffle(x)
x

运行输出结果:array([ 4, 2, 8, 14, 0, 15, 6, 3, 11, 7, 13, 1, 12, 10, 9, 5])

  • np.sort(x, axis=) 默认axis=1
np.sort(x)

运行输出结果:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

​ 此时,并没有改变x,x仍是一个乱序的状态,如果想要直接在x上进行排序:

x.sort()
x

运行输出结果:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

​ 那么对于二维矩阵呢?

X = np.random.randint(10, size=(4, 4))
X

运行输出结果:

array([[5, 3, 9, 2],[3, 7, 5, 7],[0, 6, 2, 0],[8, 7, 4, 8]])
np.sort(X, axis=0)

运行输出结果:

array([[0, 3, 2, 0],[3, 6, 4, 2],[5, 7, 5, 7],[8, 7, 9, 8]])
  • np.argsort() 按照索引位置排序
import numpy as np
x = np.arange(16)
np.random.shuffle(x)
np.argsort(x)

运行输出结果:

array([ 1, 15,  9,  0, 10,  8, 12, 13,  5,  4,  6,  2,  3, 14, 11,  7],dtype=int64)
  • np.partition()

    其实,在很多情况下,我们并不需要将所有数进行从大到小排序,而是寻找一个中间值,小于中间值的在左边,大于中间值的在右边。

np.partition(x, 3)

运行输出结果: array([ 0, 1, 2, 3, 9, 8, 10, 12, 5, 11, 4, 14, 6, 7, 13, 15])

  • np.argpartition()
np.argpartition(x, 3)

运行输出结果:

array([ 1, 15,  9,  0,  4,  5,  6,  3,  8,  2, 10, 11, 12, 13, 14,  7],dtype=int64)

五、Fancy Indexing

import numpy as np
x = np.arange(16)

​ 如果我们需要从3-9每间隔2个取一个数?

x[3:9:2]

运行输出结果: array([3, 5, 7])

​ 如果我们需要去取得数据不是等间距的呢?

idx = [3, 5, 8]
x[idx]

运行输出结果:array([3, 5, 8])

ind = np.array([[2, 3],[4, 5]])
x[ind]

运行输出结果:

array([[2, 3],[4, 5]])
X = x.reshape(4, -1)
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row, col]

运行输出结果:array([ 1, 6, 11])

col = [True, False, True, True]
X[1:3, col]

运行输出结果:

array([[ 4,  6,  7],[ 8, 10, 11]])

六、Numpy.array的比较

import numpy as np
x = np.arange(16)
x > 3

运行输出结果:

array([False, False, False, False,  True,  True,  True,  True,  True,True,  True,  True,  True,  True,  True,  True])
  • '>'

  • '<'

  • '>='

  • '<='

  • '=='

  • '!='

    ​ 结合刚刚学过的聚合操作,进行一些练习。

np.sum(x <= 3)

运行输出结果:4

np.sum((x >= 3) & (x <= 10))

运行输出结果:8

np.count_nonzero(x <= 3)        # True为1,False为0

运行输出结果:4

  • np.any()
  • np.all()
  • 与——&
  • 或——|
  • 非——~

我是尾巴

​ 每篇一句毒鸡汤:千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。

我干了,你随意!

本次推荐:一款图片阅读器,预览更轻松

honeyview

坚持!

转载于:https://www.cnblogs.com/zhangkanghui/p/11280845.html

相关文章:

VC串口通信编程-2

VC串口通信编程 (2009-07-08 13:48:40) 转载▼Win32串口编程&#xff08;转&#xff1a;韩耀旭&#xff09;  在工业控制中&#xff0c;工控机&#xff08;一般都基于Windows平台&#xff09;经常需要与智能仪表通过串口进行通信。串口通信方便易行&#xff0c;应用广泛。一般…

【bootstrap】如何解决页面缩小后上方导航栏格式变化的问题

问题描述&#xff1a; bootstrap官方模板中上方导航栏当缩小到一定程度后会发生格式的变化&#xff0c;但我想取消这种变化 页面缩小前&#xff1a; 页面缩小后&#xff1a; 解决方法&#xff1a; 经过阅读bootstrap的css代码后发现了这么一行代码&#xff1a; 将其删除后问…

ASIHttpRequest使用前的配置

ASIHttpRequest使用前的配置 1、从以下地址获取ASIHttpRequest相关资源文件&#xff1a; Github project page: http://github.com/pokeb/asi-http-request/tree Download the latest version: http://github.com/pokeb/asi-http-request/tarball…

当面试官问这些基础的Python问题时,竟然还有80%的人不会!

怎样才能开始一个交互式解释器的会话&#xff1f; 在Windows下可以通过点击开始按钮&#xff0c;选择“程序”&#xff0c;点击“Python”&#xff0c;然后选择“Python&#xff08;command line&#xff09;”菜单选项来开始一个交互会话。 你应该在哪里输入系统命令行来启动一…

xcode 4.3.2 use storyboard创建TableView

xcode 4.3.2 use storyboard 使用TableView&#xff0c;显示一个颜色列表&#xff0c;表格包括一张图片&#xff0c;一个文本&#xff0c;一行副文本。 TableView 呈现列表格式的数据&#xff0c;每一行是一个UITableViewCell对象&#xff0c;每个UITableViewCell可以显示文本标…

VScode 插件、配置记录

常用插件&#xff1a; Chinese&#xff08;Simplified&#xff09;pythonTabNineSettings Sync 配置&#xff1a; 外观设置为&#xff1a; Solarized Dark 转载于:https://www.cnblogs.com/yeran/p/11284772.html

【jqgrid】疑难杂症及解决方法(随缘更新)

最近在学习使用jqgrid&#xff0c;由于初次使用就要应用的工程的开发当中&#xff0c;还是遇到了不小的麻烦&#xff0c;在此梳理遇到的问题及解决方法。 遇到问题&#xff1a; 1、如何解决翻页键不好用的问题 2、如何调整grid的宽度和高度 3、当grid宽度超过页面的宽度之后…

vcenter converter 转换xenserver下linux的错误

需求&#xff1a;需将xenserver5.6上的一台ubuntu迁移到ESXi 4.1.0上面 首先部署一台vmware vcenter converter standalone,具体步骤省略&#xff0c;到99%时出现错误: 无法重新配置目标虚拟机。 检查日志,发现这么一句话&#xff1a; (converter.fault.CloneFault) { dynamicT…

使用xml布局菜单

目前为止我们都是通过硬编码来增加菜单项的&#xff0c;android为此提供了一种更便利的方式&#xff0c;就是把menu也定义为应用程序的资源&#xff0c;通过android对资源的本地支持&#xff0c;使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响…

Prevent Crow's Feet

来源&#xff1a;http://www.howbeauty.org/anti-aging/223424.htm Wear a sunscreen with an SPF of at least fifteen that blocks both UVA and UVB rays whenever you go outside. Be sure to apply it to your eyelids and under your eyes.Wear sunglasses when youll be…

【css】如何使光标移动到某个区域后改变形状

问题描述&#xff1a; 当光标移动到页面的某个位置的时候需要使其改变形状&#xff0c;如变成一个伸出食指的小手等等。 解决方法&#xff1a; 使用到css中的cursor属性 代码实现&#xff08;以伸出食指的小手为例&#xff09;&#xff1a; <!DOCTYPE html> <html …

iphone开发UITable内嵌不同风格Table

在iphone开发中使用Table的时候&#xff0c;由于Table有的风格UITableViewStylePlain或者UITableViewStyleGrouped一旦指定&#xff0c;便无法修改。但是在使用的过程中&#xff0c;总是会出现一些特殊的需求&#xff0c;他们要求可以同时使用不同的风格。 那么可以在制作table…

php面试题8

php面试题8 一、总结 二、php面试题8 1、表单数据提交方式 POST 和 GET 的区别&#xff0c;URL 地址传递的数据最大长度是多少&#xff1f;$_GET 传参是请求 HTTP 协议通过 url 参数传递和接收,会在浏览器地址栏中看到$_GET 传参最多 2k 个字符$_POST 是实体数据传参,隐藏式的,…

php 计算器

<html><head><title>PHP实现简单计算器</title><meta http-equiv"Content-Type" content"text/html;charsetgb2312"></head> <?php$num1true;$num2true;$numatrue;$numbtrue;$message"";//单路分支if(i…

【jQuery】如何用jQuery实现鼠标移入后改变背景颜色

实现效果如图&#xff1a; jQuery代码实现&#xff1a; $(function () {var oldColor "";$(".mouse-in-out").mouseover(function () {originalColor $(this).css("background-color");$(this).css("background-color","#d9e8f…

域用户权限设置目录权限

声明&#xff1a;本文转载自gnaw0725.blogbus.com&#xff0c;更新网址&#xff1a;http://gnaw0725.blog.51cto.com。 一般用户是domain user权限&#xff0c;现在设置的策略是&#xff0c;每个硬盘分区的权限下只有administratordomain,和userdomain可以读写&#xff0c;遇到…

有用的编程相关网站

1.代码可视化网站&#xff1a;http://www.pythontutor.com 转载于:https://www.cnblogs.com/fuqia/p/9074571.html

手把手教你如何扩展GridView之自带CheckBox

我们在使用GridView的时候&#xff0c;很多时候需要使用CheckBox列&#xff0c;比如批量删除&#xff0c;批量审批&#xff0c;但是每每都需要记住繁琐的实现方法。多麻烦呀&#xff01;再次给GridView做个手术&#xff0c;让它自己就能产生CheckBox岂不爽死了。以后您就有权利…

c++ 的重载、覆盖、隐藏

成员函数被重载的特征&#xff1a;&#xff08;1&#xff09;相同的范围&#xff08;在同一个类中&#xff09;&#xff1b;&#xff08;2&#xff09;函数名字相同&#xff1b;&#xff08;3&#xff09;参数不同&#xff1b;&#xff08;4&#xff09;virtual关键字可有可无。…

【css】padding 和 margin的区别

css中有有一对经常是一起出现的属性&#xff1a;padding和margin&#xff0c;接下来我们以一个例子来看一下两个属性的作用及其区别。 实例演示&#xff1a; 使用属性前&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head&…

POJ-2159(Water)

2159:Ancient Cipher 查看提交统计提问时间限制: 1000ms 内存限制: 65536kB 描述 Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital…

tensor乘运算

torch.mul(a, b) 是矩阵 对应位相乘&#xff0c;即点乘操作&#xff0c; a和b的维度必须相等&#xff0c;a的维度是(1,2)&#xff0c; 则b的维度必须是&#xff08;1,2&#xff09;&#xff0c; 返回还是&#xff08;1,2&#xff09;的矩阵 torch.mm(a,b)是矩阵a和b矩阵相乘&am…

android,与PHP通信,返回JSON

小项目需要读取数据库&#xff0c;刚好手头有服务器&#xff0c;处于某些考虑&#xff0c;还是想远程读数据&#xff0c;所遇异常 Logcat异常&#xff1a;SingleClientConnManager(411): Invalid use of SingleClientConnManager: connection still allocated. Make sure to re…

【工具软件】webstorm配置

下载webstorm和jar包&#xff1a; 下载网址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Tnp4TqWnu8dQzv6ds7zhyw 提取码&#xff1a;de0f 下载软件&#xff1a; 1、 2、选择一个非C盘的位置安装 3、在1处选自你电脑的操作系统&#xff0c;大概率是64位的&#x…

美国爱因斯坦计划技术分析

【本文与2014年6月16日再次编辑&#xff0c;增加了一个续文的链接】【本文于2011年8月30日再次更新&#xff0c;修订并补充了有关爱因斯坦3的一些内容】【本文于2011年8月20日更新】【前言】本文始于对网络安全态势感知的研究。而美国的这个爱因斯坦计划可以看成是网络态势感知…

[C].运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和…

[kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

L - 还是畅通工程 题目链接&#xff1a;https://vjudge.net/contest/66965#problem/L 题目&#xff1a; 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直…

[建议] GCC 新手入门【转】

本文是写给 gcc 新手的入门文章&#xff0c;所以内容比较简单。如果你知道下面3条命令都可以编译c的话&#xff0c;就不用在本文浪费时间了 g -Wall hellocpp.cpp gcc -Wall hellocpp.cpp -lstdc gfortran -Wall hellocpp.cpp -lstdc 注&#xff1a;本文最新版在wiki中 http:…

【java】如何判断数组中的内容是否重复

代码实现&#xff1a; public static boolean judgeArray(long[] arraySample) {HashSet<Long> hashSet new HashSet<Long>();for (int i 0; i < arraySample.length; i) {hashSet.add(arraySample[i]);}if (hashSet.size() arraySample.length) {return tr…

html标签的赋值与取值

现在有一个Add.ascx 和一个Add.aspx页面&#xff0c;Add.ascx中有一个html标签&#xff0c;如果标签有默认值的话在Add.ascx.cs的Page_Load中有Request.Form["标签ID"]就可以取到。 下面说赋值&#xff0c;因为我的标签是有默认值的&#xff0c;所以也就不能用<%%…