文章目录

  • 1.argmax()函数
  • 2.**numpy.random.choice**()
  • 3.shape[0]
  • 而对于矩阵来说:
  • 4.ndim
  • 5、axis=0
  • 一维数组
  • 二维数组
  • 三维数组
  • 6、np.reshape(-1)、np.reshape(-1, 1)、np.reshape(1, -1)详解
  • 7、items()
  • 8、np.zeros_like()
  • 9、np.sqrt()


1.argmax()函数

语法格式:
numpy.argmax(a,axis)
作用:返回axis轴方向最大值的索引

a :为所需处理的矩阵
axis :为处理的轴向,axis=1为横轴方向,方向从左到右;axis=0为纵轴方向,方向从上到下

一维数组:

>>> a=np.array([1,2,3,4,5])
>>> print(np.argmax(a))
4

二维数组:

>>> b=np.array([[1,0,6,4],[9,8,2,3],[3,1,2,7]])
>>> print(np.argmax(b,axis=0))
[1 1 0 2]
>>> print(np.argmax(b,axis=1))
[2 0 3]

2.numpy.random.choice()

用法:需要引用numpy

numpy.random.choice(a, size=None, replace=True, p=None)

import numpy as np
numpy.random.choice(a, size=None, replace=True, p=None)

**用途:**从a(一维数据)中随机抽取数字,返回指定大小(size)的数组
**replace:**True表示可以取相同数字,False表示不可以取相同数字
数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

import numpy as np
 
pa = [0.3, 0.2, 0.1, 0.1, 0.3]
pa=np.array(pa)
 
a = np.random.choice(np.arange(5), size=5, replace=True, p=pa)
print(a) #[3 4 1 3 0]

3.shape[0]

在深度学习代码中遇到的问题-shape[0]、shape[1]、shape[2]的区别

对于图像来说:

img.shape[0]:图像的垂直尺寸(高度)

img.shape[1]:图像的水平尺寸(宽度)

img.shape[2]:图像的通道数

举例来说,下面是一张300X534X3的图像,

import matplotlib.image as mpimg  # mpimg 用于读取图片
 
if __name__ == '__main__':
    img = mpimg.imread('cat.jpg')  # 读取和代码处于同一目录下的 img.png
    # 此时 img 就已经是一个 np.array 了,可以对它进行任意处理
    print(img.shape)  #(300, 534, 3)
    print(img.shape[0])
    print(img.shape[1])
    print(img.shape[2])


(300, 534, 3)
300
534
3

而对于矩阵来说:

shape[0]:表示矩阵的行数

    shape[1]:表示矩阵的列数

举例如下:

import numpy as np
 
if __name__ == '__main__':
    w = np.array([[1, 2, 3], [4, 5, 6]])  # 2X3的矩阵
    print(w.shape)
    print(w.shape[0])
    print(w.shape[1])

(2, 3)
2
3

运行结果如下:

由此证明,上述结果是没有问题的。

4.ndim

ndim表示数组的维度,很明显,a是一个1行三列的数组,即1×3,在维度中,1是可以忽略的,即1x1x2的数组跟1×2的数组是一样的,所以,a是一维数组。

再来看b,b是一个2行3列的数组,也就是2×3,这是二维,没错。

再看c, c是一个3行3列的数组, 即3×3, 3×3依旧是二维哦,4×3, 5×4都是二维

到d的时候,我们发现d是一个2行3列但高为4的数组, 即2x3x4,这是3维数组。

a

array([ 1., 2., 3.])

b

array([[ 1.5, 2. , 3. ],

[ 4. , 5. , 6. ]])

c

array([[ 0., 0., 0., 0.],

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

[ 0., 0., 0., 0.]])

a.ndim

1

b.ndim

2

c.ndim

2

5、axis=0

实例

一维数组

# axis=0
#第一步:axis=0对应最外层[],其内最大单位块为:1,2,3,并去掉[]
#第二步:单位块是数值,直接计算:1+2+3=6
>>> import numpy as np
>>> arr = np.array([1, 2, 3])
>>> arr.sum(axis = 0)
6

#axis=1  即:N维数组,最大能使用axis=N-1
>>> arr = np.array([1, 2, 3])
>>> arr.sum(axis = 1)  # 越界使用,报错

二维数组

#axis=0
#第一步:axis=0对应最外层[],其内最大单位块为:[1,2] 和 [3,4],并去掉最外层[]
#第二步:单位块是数组,两者对应下标元素进行计算,即:[1+3,2+4]=[4,6]
>>> arr = np.array([[1, 2], [3, 4]])
>>> arr.sum(axis = 0)
array([4, 6])

#axis=1
#第一步:axis=1对应第二层[],其内最大单位块为:第一[]内: 1,2;第二[]内: 3,4,并去掉第二层[]
#第二步:单位块是数值,直接进行计算,即:[1+2,3+4]=[3,7]
>>> arr = np.array([[1, 2], [5, 6]])
>>> arr.sum(axis = 1)
array([3, 11]

三维数组

>>> arr = np.array([[[1, 2],[3, 4]], [[5, 6],[7, 8]]])
>>> arr
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])
>>> arr.sum(axis=0)
array([[ 6,  8],
       [10, 12]])


>>> arr = np.array([[[1, 2],[3, 4]], [[5, 6],[7, 8]]])
>>> arr.sum(axis=1)
array([[ 4,  6],
       [12, 14]])

>>> arr = np.array([[[1, 2],[3, 4]], [[5, 6],[7, 8]]])
>>> arr.sum(axis=2)
array([[ 3,  7],
       [11, 15]])

第一步:axis=1对应第三层[],其内最大单位块为:第一个[]:1,2;第二个[]:3,4;第三个[]:5,6;第四个[]:7,8,并去掉第三层[]
第二步:单位块是数值,直接进行计算,即:[[1+2,3+4],[5+6,7+8]] = [[3,7],[11,15]]

Python的numpy中axis=0、axis=1、axis=2解释

numpy数组中:

  • 一维数组拥有一个轴:axis=0;
  • 二维数组拥有两个轴:axis=0,axis=1;
  • 三维数组拥有三个轴:axis=0,axis=1,axis=2。
  • 四维数组拥有三个轴:axis=0,axis=1,axis=2,axis=3。

2 数组维度
可以从左至右计算数组的方括号数目,一个方括号是一维数组,两个方括号是二维数组,三个方括号是三维数组。
如: [1, 2, 3]是一维数组、

[[1, 2, 3], [4, 5, 6]]是二维数组、

[ [[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]] ] 是三维数组。

0.3 axis(轴)与数组括号的对应关系
numpy数组都有[]标记,其对应关系:axis=0对应最外层的[],axis=1对应第二外层的[],…,axis=n对应第n外层的[]。

6、np.reshape(-1)、np.reshape(-1, 1)、np.reshape(1, -1)详解

np.reshape()规范:新的排布(shape)应与原始排布兼容

-1它指的是未知的维数

original = np.array([2, 4, 1, 3],
			[1, 2, 5, 2])

orginal.shape # (2, 4)

new_1 = orginal.reshape(-1)
print(new_1) # 新排布为(1,8)

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



# 设定新排布的列数为1,行数为未知
new_2 = orginal.reshape(-1, 1)
print(new_2)  # 新排布为(8,1)

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


# 设定新排布的行数为1,列数为未知
new_3 = orginal.reshape(1, -1)
print(new_3)  # 新排布为(1,8)
array([2, 4, 1, 3, 1, 2, 5, 2])

7、items()

items():遍历字典中所有的key 以及value, items():遍历字典中所有的key 以及value返回“key,value"

def hello(**kwargs):
        for key,value in kwargs.items():
                print (key,value)
 
hello(name='zhaojinye' ,sex = "nv",husband = "yu")                                             
#输出:
name zhaojinye
sex nv
husband yu

8、np.zeros_like()

输入为矩阵x
输出为形状和x一致的矩阵,其元素全部为0

>>> import numpy as np
>>> a=np.arange(12)

>>> a=a.reshape(2,2,3)
>>> a
array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])
>>> b=np.zeros_like(a)
>>> b
array([[[0, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 0, 0]]])
>>>

9、np.sqrt()

矩阵元素的平方根

import numpy
 
array_2d = numpy.array([[1, 4], [9, 16]], dtype=numpy.float)
 
print(array_2d)
 
array_2d_sqrt = numpy.sqrt(array_2d)
 
print(array_2d_sqrt)

#
[[ 1.  4.]
 [ 9. 16.]]
[[1. 2.]
 [3. 4.]]