目录

  • 说明
  • 一、数组的创建
    • 1.1 利用现有的数据创建数组
      • 1.1.1 np.array()
      • 1.1.2 np.asarray()
      • 1.1.3 np.fromfunction()
      • 1.1.4 np.fromstring()
    • 1.2 根据数值范围创建数组
      • 1.2.1 np.arange()
      • 1.2.2 np.linspace()
      • 1.2.3 np.logspace()
      • 1.2.4 np.geomspace()
    • 1.3 创建特定类型的数组
      • 1.3.1 np.empty()
      • 1.3.2 np.ones()
      • 1.3.3 np.zeros()
      • 1.3.4 np.full()
      • 1.3.5 np.eye()
      • 1.3.6 np.identity()
    • 1.4 创建对角矩阵、上/下三角矩阵
      • 1.4.1 np.diag()
      • 1.4.2 np.tri()
      • 1.4.3 np.tril()
      • 1.4.4 np.triu()
  • 二、数组的基本操作
    • 2.1 查看数组信息
    • 2.2 算术运算符
    • 2.3 索引与切片
      • 2.3.1 索引(indexing)
      • 2.3.2 切片(slicing)
      • 2.3.3 高级索引
        • 2.3.3.1 省略号(...)的使用
        • 2.3.3.2 使用索引数组进行索引
        • 2.3.3.3 使用布尔数组进行索引
    • 2.4 广播机制(broadcasting)
      • 2.4.1 标量与一维数组
      • 2.4.2 一维数组与二维数组
      • 2.4.3 一维数组(列向量)与一维数组(行向量)
      • 2.4.4 广播规则

说明

  • 本文不会介绍所有的数组函数,并且也不会讲解所有参数,详情可参阅官方文档。
  • 带有方括号[ ]的参数可以省略。
  • 每一小段代码的输出都会写在下方的注释中。

一、数组的创建

1.1 利用现有的数据创建数组

函数作用
np.array(object, dtype=None, copy=True)object可以是标量、列表、元组等对象,dtype是数据类型,copy控制是否复制object;将object转换为n维数组
np.asarray(object, dtype=None)与np.array()的作用类似,不同之处请见1.1.2节
np.fromfunction(f, shape, dtype=float)shape是一个大小为N的整型元组,f是具有N个参数的标量函数;返回shape形状的数组,其中的每个元素是按照其索引传入f后得到的值
np.fromstring(s, dtype=float, sep)s是字符串,sep是分隔符;将字符串按分隔符分割后转换为数组

1.1.1 np.array()

np.array()是最常用的一种方法。

""" example 1 """
A = np.array([1, 2])
print(A)
print(type(A))
# [1 2]
# <class 'numpy.ndarray'>""" example 2 """
A = np.array([(1, 2), (3, 4)])
print(A)
print(type(A))
# [[1 2]
#  [3 4]]
# <class 'numpy.ndarray'>""" example 3 """
A = np.array([1, 2, 3], dtype=np.complex128)
print(A)
# [1.+0.j 2.+0.j 3.+0.j]""" example 4 """
A = np.array([1, 2, 3])
B = np.array(A)
print(B)
print(type(B))
# [1 2 3]
# <class 'numpy.ndarray'>""" example 5 """
A = np.array([1, 2, 3])
B = np.array(A)
C = np.array(A, copy=False)
A[0] = 2
print(B, '\n', C)
# [1 2 3] 
# [2 2 3]

从example 4中不难发现,我们的object也可以是ndarray。

从example 5中可以看出,如果关掉copy,我们修改A的值是会影响到C的(因为此时C指向A)。事实上,如果A不是ndarray(比如列表),那么无论copy设置成什么,我们的np.array()都会复制一份A

1.1.2 np.asarray()

np.array()和np.asarray()都可以将源数据object转化为ndarray,但主要区别就在于:当源数据是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。

从下面的两个例子便能看出区别:

""" example 1 """
A = [1, 2, 3]
B = np.array(A)
C = np.asarray(B)
A[0] = 2
print(A, '\n', B, '\n', C, sep='')
# [2, 2, 3] 
# [1 2 3] 
# [1 2 3]""" example 2 """
A = np.array([1, 2, 3])
B = np.array(A)
C = np.asarray(A)
A[0] = 2
print(A, '\n', B, '\n', C, sep='')
# [2 2 3] 
# [1 2 3] 
# [2 2 3]

为了方便记忆,我们可以这样理解:

# 不严谨的来讲,以下两种语句等价:
np.array(object, copy=False)
np.asarray(object)

如无特殊需要,尽量使用np.array()而不是np.asarray()

1.1.3 np.fromfunction()

我们首先定义一个函数

def f(x, y):return x + y

因为 f 有两个参数,所以shape的大小也应为2。我们不妨设shape=(3, 2),那么最终返回的就是大小为 3×23\times 23×2 的数组. 记该数组为 AAA,那么自然有

A[i][j]=f(i,j)=i+jA[i][j]=f(i,j)=i+j A[i][j]=f(i,j)=i+j

我们来看一下效果:

A = np.fromfunction(f, (3, 2), dtype=int)
print(A)
# [[0 1]
#  [1 2]
#  [2 3]]

若使用python的匿名函数,我们仅需一行代码:

A = np.fromfunction(lambda x, y: x + y, (3, 2), dtype=int)

使用 np.fromfunction(),我们可以很轻松的创建元素与索引相关的数组,例如,对于下面这种数组:

[TrueFalseFalseFalseTrueFalseFalseFalseTrue]\begin{bmatrix} \mathrm{True} & \mathrm{False} & \mathrm{False} \\ \mathrm{False} & \mathrm{True} & \mathrm{False} \\ \mathrm{False} & \mathrm{False} & \mathrm{True} \\ \end{bmatrix} TrueFalseFalseFalseTrueFalseFalseFalseTrue

我们可以这样来创建:

A = np.fromfunction(lambda i, j: i == j, (3, 3))

1.1.4 np.fromstring()

对于下面这样的字符串:

s = '1 2 3 4 5'

若要将其转换为整型数组,我们的第一反应是:

A = np.array(list(map(int, s.split())))
print(A)
# [1 2 3 4 5]

但是使用 np.fromstring(),我们可以更方便地完成创建。注意到字符串中的每个数字是由空格分割的,因此只需要设置sep=’ '即可:

A = np.fromstring(s, dtype=int, sep=' ')
print(A)
# [1 2 3 4 5]

1.2 根据数值范围创建数组

函数作用
np.arange([start], stop, [step], dtype=None)创建一个在 [ start, stop ) 区间内的,步长为step的数组;start省略时默认为0,step省略时默认为1
np.linspace(start, stop, num=50, endpoint=True, dtype=None)创建一个在 [ start, stop ] 区间内的,大小为num的数组;当endpoint关闭时,区间变为 [ start, stop )
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)相当于在np.linspace()结果的基础上,对其中的每个元素 aaa 作变换 a:=baseaa:=base^aa:=basea
np.geomspace(start, stop, num=50, endpoint=True, dtype=None)与np.logspace()类似,只不过np.geomspace()会自动选择合适的基底

1.2.1 np.arange()

""" example 1 """
A = np.arange(6)
B = np.arange(2, 6)
C = np.arange(2, 10, 2)
print(A, '\n', B, '\n', C, sep='')
# [0 1 2 3 4 5]
# [2 3 4 5]
# [2 4 6 8]""" example 2 """
A = np.arange(6, -1, -1, dtype=float)
print(A)
# [6. 5. 4. 3. 2. 1. 0.]""" example 3 """
A = np.arange(6, -1, -1.0)
print(A)
# [6. 5. 4. 3. 2. 1. 0.]

注意: 当start的值远大于step的值时,np.arange()可能不会返回预期的结果,这时候就需要使用np.linspace()了

1.2.2 np.linspace()

np.linspace()默认返回的是浮点型数组(float_

""" example 1 """
A = np.linspace(1, 10, 10)
B = np.linspace(1, 10, 10, endpoint=False)
print(A, '\n', B, sep='')
# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
# [1.  1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]

1.2.3 np.logspace()

该函数与np.linspace()函数密切相关,我们先来看np.linspace()的一个例子:

A = np.linspace(1, 5, 5)
print(A)
# [1. 2. 3. 4. 5.]

将linspace换为logspace,并设置基底为2:

A = np.logspace(1, 5, 5, base=2)

根据前面表格中的描述,结果应该为:

[21,22,23,24,25][2^1,2^2,2^3,2^4,2^5] [21,22,23,24,25]

输出也的确如此:

# [ 2.  4.  8. 16. 32.]

1.2.4 np.geomspace()

np.logspace() 和 np.geomspace() 都会生成指数增长的数组,区别在于,logspace生成的数组是:

[basestart,⋯,basestop][base^{start},\cdots,base^{stop}] [basestart,,basestop]

而geomspace生成的数组是:

[start,⋯,stop][start,\cdots,stop] [start,,stop]

例如,设置start=1,stop=1000,num=4,则geomspace会自动选择基底10:

A = np.geomspace(1, 1000, num=4, dtype=int)
print(A)
# [   1   10  100 1000]

1.3 创建特定类型的数组

函数作用
np.empty(shape)shape为整数整型列表/元组;返回shape形状的空数组(未初始化的数组)
np.empty_like(prototype)prototype是一个给定的数组;返回一个与给定数组形状相同空数组
np.ones(shape)返回shape形状的全1数组
np.ones_like(prototype)返回与给定数组形状相同全1数组
np.zeros(shape)返回shape形状的全0数组
np.zeros_like(prototype)返回与给定数组形状相同全0数组
np.full(shape, value)value为标量数组;当value是标量时,返回一个与shape形状相同的全value数组;value是数组的情形见1.3.4节
np.full_like(prototype, value)返回与给定数组形状相同全value数组
np.eye(m, n=m, k=0)m是矩阵的行数,n是矩阵的列数,k控制对角线;返回主对角线全为1,其余位置全为0的矩阵(数组)
np.identity(n)返回n阶单位矩阵

1.3.1 np.empty()

empty与zeros不同,它不会将元素初始化为0(但也并不代表数组中没有数字),所以速度可能会比zeros快一些。

""" example 1 """
A = np.empty(2)
print(A)
# [4.64929150e+143 2.37662553e-045]""" example 2 """
A = np.empty([2, 2])
print(A)
# [[ 1.05328699e-311 -6.77097176e-233]
#  [ 1.05328694e-311  1.05328694e-311]]""" example 3 """
A = np.array([1, 2, 3])
B = np.empty_like(A)
print(B)
# [5111887 5701703 5111877]

1.3.2 np.ones()

""" example 1 """
A = np.ones([2, 2])
print(A)
# [[1. 1.]
#  [1. 1.]]""" example 2 """
A = np.array([1, 2, 3])
B = np.ones_like(A)
print(B)
# [1 1 1]

1.3.3 np.zeros()

""" example 1 """
A = np.zeros(5)
print(A)
# [0. 0. 0. 0. 0.]""" example 2 """
A = np.array([1, 2, 3])
B = np.zeros_like(A)
print(B)
# [0 0 0]

1.3.4 np.full()

""" example 1 """
A = np.full((2, 3), 3)
print(A)
# [[3 3 3]
#  [3 3 3]]""" example 2 """
A = np.full((3, 3), [1, 2, 3])
print(A)
# [[1 2 3]
#  [1 2 3]
#  [1 2 3]]

可以看出,当value是数组时,返回的数组中每一行都是用value进行填充的。需要注意的是,在这种情形下,shape[1] 需要与 len(value) 保持一致,否则会报错:

A = np.full((3, 4), [1, 2, 3])
print(A)
# ValueError: could not broadcast input array from shape (3,) into shape (3,4)

我们再来看 np.full_like():

A = np.arange(6, dtype=int)
B = np.full_like(A, 1)
C = np.full_like(A, 0.1)
D = np.full_like(A, 0.1, dtype=float)
print(A, '\n', B, '\n', C, '\n', D, sep='')
# [0 1 2 3 4 5]
# [1 1 1 1 1 1]
# [0 0 0 0 0 0]
# [0.1 0.1 0.1 0.1 0.1 0.1]

1.3.5 np.eye()

先介绍一下对角线。

主对角线:

(0,0)→(1,1)→⋯→(s,s)(0,0)\to(1,1)\to\cdots\to(s,s) (0,0)(1,1)(s,s)

例如,下面两个矩阵中,1所在的路径均为主对角线:

[1001],[100010]\begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix},\quad \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ \end{bmatrix} [1001],[100100]

副对角线:

TypeI:(0,0+k)→(1,1+k)→⋯→(s,s+k),k≥1TypeII:(0−k,0)→(1−k,1)→⋯→(s−k,s),k≤−1\mathrm{Type \;I}:\; (0,0+k)\to(1,1+k)\to\cdots\to(s,s+k),\quad k\geq 1 \\ \mathrm{Type \;II}:\; (0-k,0)\to(1-k,1)\to\cdots\to(s-k,s),\quad k\leq -1 \\ TypeI:(0,0+k)(1,1+k)(s,s+k),k1TypeII:(0k,0)(1k,1)(sk,s),k1

其中 kkk 是整数.

我们先看第一型副对角线,不妨就设 k=1k=1k=1,则路径为

(0,1)→(1,2)→(2,3)→⋯→(s,s+1)(0,1)\to(1,2)\to(2,3)\to\cdots\to(s,s+1) (0,1)(1,2)(2,3)(s,s+1)

例如,下面两个矩阵中,1所在的路径均为第一型副对角线:

[010001000],[010000010000010]\begin{bmatrix} 0 & 1 & 0\\ 0 & 0 & 1\\ 0 & 0 & 0\\ \end{bmatrix},\quad \begin{bmatrix} 0 & 1 & 0&0&0\\ 0 & 0 & 1&0&0\\ 0 & 0 & 0&1&0\\ \end{bmatrix} 000100010,000100010001000

相当于主对角线往上平移 kkk 个单位得到第一型副对角线

再看第二型副对角线,不妨设 k=−1k=-1k=1,则路径为:

(1,0)→(2,1)→(3,2)→⋯→(s+1,s)(1,0)\to(2,1)\to(3,2)\to\cdots\to(s+1,s) (1,0)(2,1)(3,2)(s+1,s)

例如,下面两个矩阵中,1所在的路径均为第二型副对角线:

[000100010],[000100010001000]\begin{bmatrix} 0 & 0 & 0\\ 1 & 0 & 0\\ 0 & 1 & 0\\ \end{bmatrix},\quad \begin{bmatrix} 0 & 0 & 0\\ 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \\ 0 & 0 & 0 \\ \end{bmatrix} 010001000,010000010000010

相当于主对角线往下平移 −k-kk 个单位得到第二型副对角线

于是我们可以作一个总结:

  • k=0k=0k=0 时为主对角线。
  • k>0k>0k>0 时为第一型副对角线,相当于主对角线往上平移 kkk 个单位得到。
  • k<0k<0k<0 时为第二型副对角线,相当于主对角线往下平移 −k-kk 个单位得到。

为方便起见,我们统一使用 “kkk 条对角线” 这一名称来称呼所有的对角线。例如,第 000 条对角线就是主对角线,第 111 条对角线由主对角线向上平移1个单位得到,第 −1-11 条对角线由主对角线向下平移1个单位得到。

在知道了什么是对角线后,下面的例子就不难理解了:

""" example 1 """
A = np.eye(3)
print(A)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]""" example 2 """
A = np.eye(3, 5)
print(A)
# [[1. 0. 0. 0. 0.]
#  [0. 1. 0. 0. 0.]
#  [0. 0. 1. 0. 0.]]""" example 3 """
A = np.eye(3, 4, k=2)
print(A)
# [[0. 0. 1. 0.]
#  [0. 0. 0. 1.]
#  [0. 0. 0. 0.]]""" example 4 """
A = np.eye(5, 3, k=-3)
print(A)
# [[0. 0. 0.]
#  [0. 0. 0.]
#  [0. 0. 0.]
#  [1. 0. 0.]
#  [0. 1. 0.]]

1.3.6 np.identity()

以下三种语句等价:

np.eye(n)
np.eye(n, n)
np.identity(n)

1.4 创建对角矩阵、上/下三角矩阵

函数作用
np.diag(v, k=0)k控制对角线;当v是二维数组时,第k条对角线作为一维数组返回;当v是一维数组时, 会将该数组作为第k条对角线并构建对角矩阵
np.tri(m, n=m, k=0)创建一个 m×n 的矩阵,其中第k条对角线及其以下的部分全为1,其余位置全为0
np.tril(object, k=0)object是二维数组;返回一个object的副本,其中该副本第k条对角线以上的部分置为0
np.triu(object, k=0)返回一个object的副本,其中该副本第k条对角线以下的部分置为0

1.4.1 np.diag()

""" example 1 """
A = np.array([[1, 2], [3, 4]])
print(np.diag(A))
print(np.diag(A, k=1))
# [1 4]
# [2]""" example 2 """
A = np.array([1, 2, 3])
print(np.diag(A))
print(np.diag(A, k=1))
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]
# [[0 1 0 0]
#  [0 0 2 0]
#  [0 0 0 3]
#  [0 0 0 0]]

1.4.2 np.tri()

""" example 1 """
A = np.tri(3, 4, k=1)
print(A)
# [[1. 1. 0. 0.]
#  [1. 1. 1. 0.]
#  [1. 1. 1. 1.]]""" example 2 """
A = np.tri(3, 4, k=-1)
print(A)
# [[0. 0. 0. 0.]
#  [1. 0. 0. 0.]
#  [1. 1. 0. 0.]]""" example 3 """
A = np.tri(2, k=-1)
print(A)
# [[0. 0.]
#  [1. 0.]]

1.4.3 np.tril()

""" example 1 """
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.tril(A))
# [[1 0 0]
#  [4 5 0]
#  [7 8 9]]""" example 2 """
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.tril(A, k=-1))
# [[0 0 0]
#  [4 0 0]
#  [7 8 0]]

1.4.4 np.triu()

""" example 1 """
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.triu(A))
# [[1 2 3]
#  [0 5 6]
#  [0 0 9]]""" example 2 """
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.triu(A, k=1))
# [[0 2 3]
#  [0 0 6]
#  [0 0 0]]

二、数组的基本操作

2.1 查看数组信息

我们已经知道,在Numpy中,一维数组表示向量,二维数组表示矩阵,而对于三维及以上的数组,我们就要用张量来称呼了。

在Numpy中,数组的维度还有另外一个名称——(axes),几维数组就有几个轴。例如,对于下面这样的二维数组:

[[0., 0., 0.],[1., 1., 1.]]

它有两个轴,且该数组沿第一个轴的长度为2,沿第二个轴的长度为3,即:

在这里插入图片描述
看到这里你可能会疑惑,为什么第一个轴是沿行方向的而第二个轴是沿列方向的呢? 为什么不能让第一个轴沿列方向而第二个轴沿行方向呢?

这是因为,我们在进行索引时,索引形式形如 A[i][j]A[i][j]A[i][j]索引在第个位置,索引在第个位置,所以我们的第一个轴就规定为沿行方向,第二个轴就规定为沿列方向。

对于N维数组,我们也称N为该数组的(rank)。

我们有以下方法查看数组的信息:

方法作用
ndarray.ndim返回数组的维数(秩)
ndarray.shape元组形式返回数组的形状;例如对于二维数组,返回的形式为(m, n)
ndarray.size返回数组中元素的总数;这等于shape中所有元素的乘积
ndarray.dtype返回数组的数据类型(因为数组要求其中的所有元素的数据类型必须相同)

我们通过一个例子进一步学习这些方法:

A = np.array([[1, 2, 3], [4, 5, 6]])
print(A.ndim)
print(A.shape)
print(A.size)
print(A.dtype)
# 2
# (2, 3)
# 6
# int32

2.2 算术运算符

对数组应用算术运算符则会 按元素(又称逐个元素) 进行处理。

A = np.array([1, 2, 3])
B = np.array([4, 5, 6])print(A + B)
# [5 7 9]
print(B - A)
# [3 3 3]
print(A + 2)
# [3 4 5]
print(A * 2)
# [2 4 6]
print(A / 2)
# [0.5 1.  1.5]
print(A ** 2)
# [1 4 9]
print(A * B)
# [ 4 10 18]
print(A ** B)
# [  1  32 729]
print(A >= 2)
# [False  True  True]

当对不同精度(数据类型)的数组进行运算时,结果的精度(数据类型)为参与运算的数组的最高精度(向上转换)。

例如,将数据类型分别为int32和float64的两个数组相加,结果将是精度为float64的数组:

A = np.array([1, 2, 3], dtype=int)
B = np.array([4, 5, 6], dtype=float)
C = A + B
print(C)
print(C.dtype)
# [5. 7. 9.]
# float64

将数据类型分别为float64和complex128的两个数组相加,结果将是精度为complex128的数组:

A = np.array([1, 2, 3], dtype=complex)
B = np.array([4, 5, 6], dtype=float)
C = A + B
print(C)
print(C.dtype)
# [5.+0.j 7.+0.j 9.+0.j]
# complex128

2.3 索引与切片

Numpy的n维数组可以像Python的列表那样进行索引、赋值、切片、迭代等操作。

2.3.1 索引(indexing)

n维数组索引和赋值的方法和列表一样:

A = np.arange(12)
print(A[3])
# 3
A[5] = 9
print(A)
# [ 0  1  2  3  4  9  6  7  8  9 10 11]

当然我们还可以同时索引多个元素:

A = np.arange(12)
indexes_1 = np.array([1, 4, 7, 9])
indexes_2 = [1, 4, 7, 9]
print(A[indexes_1])
print(A[indexes_2])
# [1 4 7 9]
# [1 4 7 9]

可以看出,indexes为n维数组列表时都可以完成对多个元素的索引,但indexes为元组时会索引失败

对于二维列表,索引某个元素的方法为 A[i][j]A[i][j]A[i][j]。 但在二维数组中,除了该方法以外,还有另外一种方法:A[i,j]A[i, j]A[i,j]

A = np.array([[1, 2, 3], [4, 5, 6]])
print(A[0, 1])
print(A[1, -1])
# 2
# 6

请使用 A[i,j]A[i, j]A[i,j],它的效率比 A[i][j]A[i][j]A[i][j] 更高。

如果索引数小于数组的维度,则会获得一个子数组:

A = np.array([[1, 2, 3], [4, 5, 6]])
print(A[0]) # 相当于取A的第0行
# [1 2 3]

回到一维数组,如果数组容量非常大,并且我们需要索引的元素非常多时,有没有比较简便的方法呢?

答案就是切片。

2.3.2 切片(slicing)

  • 不止n维数组和列表,python中的任何有序序列都支持切片,如字符串,元组等。
  • 切片返回的结果类型与被切片对象的类型一致。对数组切片得到数组,对列表切片得到列表,对字符串切片得到字符串。

我们接下来只讨论数组切片,其标准格式为:

A[start:stop:step],step≠0A[start:stop:step],\quad step\neq0 A[start:stop:step],step=0

start是切片起点索引,end是切片终点索引,注意这里是左开右闭区间,即 [start,stop)[start, stop)[start,stop)

step省略时默认为1,且step的符号决定切片的方向:step为正时,执行正向切片;step为负时,执行反向切片。

例如:

A = np.arange(10)
print(A[1:6:1])
print(A[5:0:-1])
# [1 2 3 4 5]
# [5 4 3 2 1]

假设step给定:

  • 若只省略stop,则会从start开始沿切片方向一直切片到数组的某一端点(包含端点)。
  • 若只省略start,则会从数组的某一端点沿切片方向一直切片到stop(不包含stop)。

例如:

A = np.arange(10)
print(A[1::1])
print(A[:0:-1])
# [1 2 3 4 5 6 7 8 9]
# [9 8 7 6 5 4 3 2 1]
  • 若start和stop都省略,则会从数组的其中一个端点开始沿切片方向一直切片到另一个端点(包含端点)

例如:

A = np.arange(10)
print(A[::1])
print(A[::-1])
# [0 1 2 3 4 5 6 7 8 9]
# [9 8 7 6 5 4 3 2 1 0]

于是我们得到了一个快速反转数组的方法:

A = A[::-1]

因为step为1时可以省略,并且可以进一步省略一个冒号,即下面三种语句等价:

A[start:stop:1]
A[start:stop:]
A[start:stop]

所以我们还能得到一个复制数组的方法:

B = A[:]

在熟悉了切片之后,我们可以完成更复杂的操作,例如对于下面这样的矩阵:

A=[12345678910111213141516]A= \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 \\ \end{bmatrix} A=15913261014371115481216

如果我们要想取出 AAA 的最后三行,可以这样做:

# 以下两种语句等价,试思考为什么等价
print(A[1:, :])
print(A[1:])

如果我们要想取出 AAA 的最后三列,则应该这样做:

# 试思考为什么只有这一种方案
print(A[:, 1:])

若要想获得 2,4,10,122, 4, 10, 122,4,10,12 这四个元素,我们只需进行如下索引(切片):

# 相当于取第0行、第3行与第1列、第3列交叉位置的元素
print(A[::2, 1::2])
# [[ 2  4]
#  [10 12]]

2.3.3 高级索引

这一小节我们将讨论更高级的索引(切片),它能帮你方便快捷地选取某些元素。

2.3.3.1 省略号(…)的使用

回到2.3.1节,我们知道,对于一个二维数组,取出它沿第一个轴方向上的第一个子数组(即取第0行),应该使用 A[0],事实上,它等价于 A[0, :]。对于三维数组而言,取它在第三个轴方向上的第k个子数组,我们应该用 A[:, :, k],这个时候我们就没有更简洁的表示形式了。

那么问题来了,对于N维数组,当N非常大时,如果我们要想取它在某个轴上的第k个子数组,我们的索引会涉及到大量的冒号和逗号,而手动输入是不现实的,那该如何解决这一问题呢?

好在Numpy提供了一种更为简洁的表示方式,当有两个及以上的冒号时,我们可以用三个点 ... 来代替。例如,对于上面的第二个例子,我们可以简洁地写成 A[..., k]

假如 A 是一个五维数组,则:

  • A[1,2,...] 等价于 A[1,2,:,:,:]
  • A[...,3] 等价于 A[:,:,:,:,3]
  • A[4,...,5,:] 等价于 A[4,:,:,5,:]

省略号 ... 在索引中最多出现一次

我们来看一个三维数组的例子:

A = np.array([[[0, 1, 2], [10, 12, 13]], [[100, 101, 102],[110, 112, 113]]])
print(A[1, :, :])
print(A[1, ...])
# [[100 101 102]
#  [110 112 113]]
# [[100 101 102]
#  [110 112 113]]print(A[..., 2])
# [[  2  13]
#  [102 113]]

2.3.3.2 使用索引数组进行索引

在2.3.1节中我们提到了,可以使用n维数组列表完成对多个元素的索引。为了更贴近Numpy,接下来我们摒弃列表,只使用n维数组去索引。该方法又称为使用索引数组进行索引。

先来看一个简单的例子:

A = np.arange(12)
i = np.array([0, 1, 4, 7])
print(A[i])
# [0 1 4 7]

当我们的索引数组是二维数组时,返回的结果也是二维数组:

A = np.arange(12)
i = np.array([[0, 1], [4, 7]])
print(A[i])
# [[0 1]
#  [4 7]]

我们可以从数学上将其推广到更一般的形式,假设 indexeskkk 维数组,即:

indexes[i1,i2,⋯,ik]=ai1i2⋯ikindexes[i_1,i_2,\cdots,i_k]=a_{i_1i_2\cdots i_k} indexes[i1,i2,,ik]=ai1i2ik

从而索引后的结果 A[indexes] 满足:

A[indexes][i1,i2,⋯,ik]=A[ai1i2⋯ik]A[indexes][i_1,i_2,\cdots,i_k]=A[a_{i_1i_2\cdots i_k}] A[indexes][i1,i2,,ik]=A[ai1i2ik]

我们还可以为多个维度提供索引,但要注意每个维度的索引数组必须具有相同的形状

A = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]])i = np.array([[0, 1], [1, 2]])
j = np.array([[2, 1], [3, 3]])print(A[i, j])
# [[ 2  5]
#  [ 7 11]]print(A[i, 2])
# [[ 2  6]
#  [ 6 10]]print(A[i, :])
# [[[ 0  1  2  3]
#   [ 4  5  6  7]]
#  [[ 4  5  6  7]
#   [ 8  9 10 11]]]

我们既然能够完成对多个元素的索引,那我们也应该可以完成对多个元素的赋值

""" example 1 """
A = np.array([0, 1, 2, 3, 4])
A[[0, 1, 3]] = 5
print(A)
# [5 5 2 5 4]""" example 2 """
A = np.array([0, 1, 2, 3, 4])
A[[0, 1, 3]] = [7, 8, 9]
print(A)
# [7 8 2 9 4]""" example 3 """
A = np.array([0, 1, 2, 3, 4])
A[[0, 1, 3]] = A[[0, 1, 3]] + 1
print(A)
# [1 2 2 4 4]""" example 4 """
A = np.array([0, 1, 2, 3, 4])
A[[0, 0, 3]] += 1
print(A)
# [1 1 2 4 4]

可以看到,example 4中,000 的值只增加了一次,为什么呢?

这是因为,A[[0, 0, 3]] 本身就是 [0, 0, 3],执行 A[[0, 0, 3]] += 1 相当于执行 A[[0, 0, 3]] = A[[0, 0, 3]] + 1 ,也就相当于执行 A[[0, 0, 3]] = [1,1,4],该语句等价于

A[0] = 1
A[0] = 1
A[3] = 4

可以看出 A[0] 被重复赋值了,因此其值自然就不会增加两次。

那如果我们想让 A[0] 的值增加两次(在保持 A[3] 只增加一次的基础上),该怎么做呢?

我们只需要修改赋值的地方:

A[[0, 0, 3]] += [x, 2, 1]

其中 x 可以为任意的数字,因为随后 A[0] 的值就会被 2 覆盖。上述语句等价于:

A[0] = x
A[0] = 2
A[3] = 1

2.3.3.3 使用布尔数组进行索引

首先看一个例子:

A = np.array([[1, 2, 3], [4, 5, 6]])
i = np.array([[True, False, False], [False, False, True]])
print(A[i])
# [1 6]

可以看出,我们只索引了 True 的地方,而为 False 的地方没有进行索引。

利用这一特点,我们可以完成一些有趣的操作。例如,对于上述的数组 A,如果想让 A 中大于等于3的元素都置为0,我们可以先创建一个布尔数组,随后赋值:

A = np.array([[1, 2, 3], [4, 5, 6]])
i = A >= 3
print(i)
# [[False False  True]
#  [ True  True  True]]A[i] = 0
print(A)
# [[1 2 0]
#  [0 0 0]]

我们再来看几个例子进一步熟悉布尔数组索引:

A = np.array([[1, 2, 3], [5, 6, 7]])
i = np.array([False, True])
j = np.array([True, False, True])print(A[i, :])
# [[5 6 7]]print(A[:, j])
# [[1 3]
#  [5 7]]print(A[i, j])
# [5 7]

2.4 广播机制(broadcasting)

Numpy在处理两个或多个不同形状的数组时会采取广播机制。简单来讲,就是扩展其中的一个数组或同时扩展两个数组使得它们的形状相同,这样才能继续进行运算。

2.4.1 标量与一维数组

例如,标量 * 数组 这一运算中,就采取了广播机制:

a = np.array([1, 2, 3])
b = 2
print(a * b)
# [2 4 6]

在计算 A * b 时,Numpy会将 b 扩展成和 A 一样大小的数组再执行按元素运算(算术运算符是按元素运算的,而按元素运算需要两个数组的形状相同):

在这里插入图片描述

(形状)数组和(形状)数组进行运算时,小数组会通过复制自身扩展成和大数组形状相同的数组,这一过程称为广播。稍后我们将知道,不是所有数组都可以进行广播。

对于上面的例子,我们也可以这样做:

a = np.array([1, 2, 3])
b = np.array([2, 2, 2])
print(a * b)

它们的结果都一样,但使用广播机制无疑是更好的,因为广播机制占用更少的内存空间,并且使用起来更方便。

2.4.2 一维数组与二维数组

考虑 一维数组 + 二维数组 的情形,因为 + 是算术运算符,则需要按元素运算,但它们的形状并不相同,因此Numpy会采取广播机制:一维数组通过复制自身扩展成与二维数组形状相同的数组。

a = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b)
# [[ 1  2  3]
#  [11 12 13]
#  [21 22 23]
#  [31 32 33]]

具体广播过程如下:

在这里插入图片描述
这里的 b 是行向量,因此会沿行方向进行广播(即向下);如果 b 是列向量,会沿列方向进行广播(即向右)。

a = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]])
b = np.array([[1], [2], [3], [4]])
print(a + b)
# [[ 1  1  1]
#  [12 12 12]
#  [23 23 23]
#  [34 34 34]]

具体示意图这里不再给出,请读者自行想象。

2.4.3 一维数组(列向量)与一维数组(行向量)

考虑 列向量 + 行向量 的情形,此时Numpy会同时广播两个数组,将其扩展成二维数组后,再执行按元素相加。

a = np.array([[0],[10],[20],[30]])
b = np.array([1, 2, 3])
print(a + b)
# [[ 1  2  3]
#  [11 12 13]
#  [21 22 23]
#  [31 32 33]]

具体广播过程如下:

在这里插入图片描述

2.4.4 广播规则

看到这里,可能会有读者疑惑,到底什么时候可以广播什么时候不能广播呢?

我们先作如下定义:

对于一个 N 维数组而言,它有 N 个轴。我们对该数组使用 shape 方法可以得到它的形状,且以元组形式呈现:(a1,a2,⋯,aN)(a_1,a_2,\cdots,a_N)(a1,a2,,aN),为叙述方便起见,我们将其表示为

a1×a2×⋯×aN(A)a_1\times a_2\times\cdots\times a_N\tag{A} a1×a2××aN(A)

例如对于一个 555333 列的矩阵(二维数组),其形状就是 5×35\times 35×3

现在考虑 M 维的数组(其中 M<NM<NM<N),其形状为

b1×b2×⋯×bMb_1\times b_2\times\cdots\times b_M b1×b2××bM

保证右对齐后下标一致,我们假设 M 维数组的形状是

bk×⋯×bN(B)b_k\times\cdots\times b_{N}\tag{B} bk××bN(B)

且应满足 N−k+1=MN-k+1=MNk+1=M,即 k=N−M+1≥2k=N-M+1\geq2k=NM+12.

现在我们将 (B)(B)(B) 式排列在 (A)(A)(A) 式的下方并执行右对齐,则有:

a1×a2×⋯×ak×ak+1×⋯×aNbk⁣×bk+1⁣×⋯×bN\begin{aligned} a_1\times a_2\times\cdots\times\,\, &a_k \times a_{k+1}\times\cdots\times a_N \\ &b_k\;\!\times b_{k+1}\;\!\times\cdots\times b_N \\ \end{aligned} a1×a2××ak×ak+1××aNbk×bk+1××bN

我们这里再给出一个定义:(ai,bi)(a_i,b_i)(ai,bi) 称为可兼容的,当且仅当 ai=bia_i=b_iai=biaia_iaibib_ibi 中有一个为 111.

于是我们就得到了广播规则:若 (ai,bi),k≤i≤N(a_i,b_i),\; k\leq i\leq N(ai,bi),kiN 均是可兼容的,则 M 维数组可以广播

我们来通过几个例子巩固一下这个概念:

""" 可广播的 """
A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
Result (4d array):  8 x 7 x 6 x 5A      (2d array):  5 x 4
B      (1d array):      1
Result (2d array):  5 x 4A      (2d array):  5 x 4
B      (1d array):      4
Result (2d array):  5 x 4A      (3d array):  15 x 3 x 5
B      (3d array):  15 x 1 x 5
Result (3d array):  15 x 3 x 5A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 5
Result (3d array):  15 x 3 x 5A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 1
Result (3d array):  15 x 3 x 5""" 不可广播的 """
A      (1d array):  3
B      (1d array):  4 A      (2d array):      2 x 1
B      (3d array):  8 x 4 x 3 

当出现不可广播的情形,程序就会报错:ValueError: operands could not be broadcast together with shapes ...

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 第21节 ACL(访问控制列表)—根据设定的条件对接口上的数据包进行过滤

    目录1 ACL概述2 ACL原理3 ACL分类3.1 标准ACL3.2 扩展ACL4 编写ACL的步骤5 命名ACL6 实验一6.1 实验要求6.2 实验步骤6.3 实验具体思路及命令7 实验二7.1 实验要求7.2 实验步骤7.3 实验具体思路及命令8 归纳总结参考文章1 ACL概述 (1&#xff09;定义&#xff1a;Access Contr…...

    2024/4/30 21:09:32
  2. C语言数字类编程题

    目录 三位数组成 水仙花数 斐波那契数列 素数 同构数 最大公约数&#xff0c;最小公倍数 完数 三位数组成 题目&#xff1a;编写程序输出符合下列要求的全部三位数 条件&#xff1a;由1、2、3、4四个数组 成&#xff0c;互不相同且无相同重复数字的三位数。 思路&#xff1…...

    2024/4/30 17:37:10
  3. Android语音播报、后台播报、语音识别,android应用案例开发大全第2版

    android:gravity“center” android:text“Speek” /> <Button android:id"id/bt_speek_bg" android:layout_width“fill_parent” android:layout_height“wrap_content” android:gravity“center” android:text“后台Speek” /> <TextView …...

    2024/4/13 15:44:38
  4. 如何通过Facebook主页获得用户的邮箱

    很多跨境电商都在使用Facebook进行广告投放&#xff0c;那如何通过操作主页来获得用户的邮箱信息呢&#xff1f; 相信很多使用Facebook进行广告投放的用户&#xff0c;大部分都会自己开发一个APP&#xff0c;好安装在Facebook专页上进行使用。像是这种方式是很有用的&#xff…...

    2024/5/1 0:39:04
  5. 图像混合Image Blending、图像融合Image Fusion、图像合成Image Synthesis、图像缝合Image Stitching

    文章目录1 Image Blending2 Image Fusion3 Image Synthesis4 Image Stitching在计算机视觉中&#xff0c;有三个与图像处理相关的相似的概念&#xff1a;图像混合Image Blending、图像融合Image Fusion、图像合成Image Synthesis、图像缝合Image Stitching。1 Image Blending …...

    2024/4/30 23:52:29
  6. HTML网页前端----表单标签

    <!DOCTYPE html> <html><head><meta charset"utf-8"><title>表单及表单元素</title></head><body><!--from标签表单标签&#xff0c;块级元素&#xff0c;会自动换行将数据传输给服务器常用属性&#xff1a;acti…...

    2024/4/30 17:36:03
  7. 动态规划分析(粗)

    1.动态规划 动态规划主要作用是利用已经求得信息来帮助解后面的问题。 1.1 递归 基本上所有的动态规划问题&#xff0c;都可以转换为递归问题。但是递归虽然能够解决出问题&#xff0c;但它需要消耗的时间和空间是非常巨大的。 递归的最主要的作用就是穷尽所有的可能&#xff0…...

    2024/4/30 20:59:02
  8. 稀疏数组的理解与实现

    稀疏数组稀疏数组的概念稀疏数组的处理思想记录稀疏数组中有几行几列&#xff0c;有几个不同的值把具有不用值的元素记录在一个小规模的数组中&#xff0c;从而缩小程序规模稀疏数组的实现遍历数组&#xff0c;获取有效数据根据有效数据创建稀疏数组将有效数据存入稀疏数组自我…...

    2024/4/13 15:44:34
  9. 剑指offer-python:37.求最小的k个数/最大的k个数

    最小的k个数&#xff1a; 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字&#xff0c;则最小的4个数字是1,2,3,4(任意顺序皆可)。 输入&#xff1a;[4,5,1,6,2,7,3,8],4 返回值&#xff1a;[1,2…...

    2024/4/7 20:54:25
  10. Java井字棋小游戏

    要求:读入一个3*3的矩阵,矩阵中的数字1表示该位置上有一个X,为0表示为O 程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符X或O,或输出无人获胜 运行结果: 代码如下: import java.util.Scanner;/*** 2022/2/3*/ public class lian1 {public static void main(Stri…...

    2024/4/30 19:25:23
  11. 十六进制转八进制:给定n个十六进制正整数,输出它们对应的八进制数。

    问题描述   给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。   接下来n行&#xff0c;每行一个由0~9、大写字母A~F组成的字符串&#xff0c;表示要转换的十六进制正整数&#…...

    2024/4/16 2:49:56
  12. Fallback回退及BlockHandler

    ...

    2024/4/16 2:50:32
  13. Android自定义动态布局 — 多图片上传,2021最新阿里Android面经

    android:background"#cbcbcb" android:orientation“vertical” android:padding“0.2px” /> <TextView android:id"id/text_no_data" android:layout_width“wrap_content” android:layout_height“wrap_content” android:layout_margin“…...

    2024/4/20 4:08:24
  14. gurobi学术版到期处理

    cmd中输入key&#xff0c;不成功的话需要&#xff1a; 卸载重新下载&#xff0c;并查看系统变量中license目录位置的更换&#xff0c;python中更新 将gurobi的安装目录中C:\Gurobi\win64\python27\lib中的文件夹gurobipy&#xff08;注意是文件夹&#xff09;拷贝到python的安装…...

    2024/4/13 15:45:25
  15. 【愚公系列】2022年02月 Python教学课程 58-Django框架之悲观锁和乐观锁

    文章目录前言1.悲观锁2.乐观锁一、Django中的悲观锁1.悲观锁案例2.关联对象锁定二、Django中的乐观锁总结前言 在电商秒杀等高并发场景中&#xff0c;仅仅开启事务还是无法避免数据冲突。比如用户A和用户B获取某一商品的库存并尝试对其修改&#xff0c;A, B查询的商品库存都为…...

    2024/4/13 15:45:24
  16. 前端入门JavaScript-----字符串的常用方法

    包前不包后原则...

    2024/4/19 5:29:54
  17. 【Node - Mongodb 】常用指令

    pipeline操作符號 幫助你進行複雜的操作&#xff0c;每個符號都會接受documents&#xff0c;並對這些document做些相應的操作&#xff0c;然後再將結果傳至下一個pipeline直到最後結果出現。 db.getCollection(sales).insertMany([ { "_id" : 1, "item" …...

    2024/4/13 15:45:39
  18. 求一个整数的各个位数

    公式&#xff1a; number%10 得出number的个位数 number/10%10 得出number的十位数 number/100%10 得出number的百位数 number/1000%10 得出number的千位数 … … 例题&#xff1a; 求45362的各个位数 个位数&#xff1a; 45326%106 十位数&#xff1a; 45326/10%10…...

    2024/4/17 21:37:31
  19. CANOpen数据字典的编辑工具

    需要的环境支持&#xff1a; 1. python-2.7.18.amd64.msi 2. wxPython2.8-win64-unicode-2.8.12.1-py27.exe 3. CanFestival-3-de1fc3261f21\objdictgen目录下的Gnosis_Utils压缩包...

    2024/4/13 15:45:25
  20. vslam十四讲 ch5踩坑记录

    1.eigen3相关程序编译不通过&#xff0c;显示找不到eigen3头文件&#xff0c;使用软连接sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen链接到eign3头文件&#xff0c;编译时若依然未通过&#xff0c;则在cmake中加入eigen3绝对路径。若编译报错但通过&#xff0c;则…...

    2024/4/19 20:30:30

最新文章

  1. 【Leetcode】740- 删除并获得点数

    问题简述 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除所有等于nums[i]-1和nums[i]1的元素。 开始你拥有0个点数。返回你能通过这些操作获…...

    2024/5/1 2:02:48
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. JVM学习笔记

    文章目录 一、内存模型1. 程序计数器2. 栈3. 本地方法栈4. 堆5. 方法区方法区位置字符串常量池位置 6. 直接内存 二、虚拟机参数设置三、类的生命周期1. 加载2. 连接1&#xff09;验证2&#xff09;准备3&#xff09;解析 3. 初始化4. 卸载 四、类加载器1. 启动类加载器2. 扩展…...

    2024/4/30 4:11:49
  4. 解决npm install安装node-sass包容易失败的问题

    具体问题如下&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…...

    2024/4/30 4:06:28
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57