Numpy的一些用法

numpy

import numpy as npy

import numpy as np

reshape() 中的-1

参考博客:https://blog.csdn.net/shyjhyp11/article/details/110949460?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。

dot()

参考博客:https://www.cnblogs.com/Shawnyi/p/10370815.html

如果为一维矩阵,则返回内积,如(2,3)和(4,5)则返回23

1
2
3
4
5
6
7
x = np.array([2,3])
y = np.array([4,5])

print(np.dot(x,y))

>>>
23

如果为多维矩阵,则返回矩阵相乘后的矩阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
x = np.array([[1, 2],
[2, 3],
[3, 4],
[4, 5]])
y = np.array([[1, 2, 3, 4],
[4, 3, 2, 1]])

print(np.dot(x,y))

>>>
[[ 9 8 7 6]
[14 13 12 11]
[19 18 17 16]
[24 23 22 21]]

shape

参考博客:https://www.pythonheidong.com/blog/article/148310/df0823653bdb440c1ce3/

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

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

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

1
2
3
4
5
6
7
x = np.array([[1, 2], [2, 3], [1, 3]])
print(x.shape[0])
print(x.shape[1])

>>>
3
2

+ array的相加

由于广播作用

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
x = np.array([[1,2],
[2,3],
[3,4],
[4,5]])

y = np.array([2,1])

print(x+y)

>>>
[[3 3]
[4 4]
[5 5]
[6 6]]

如(N,M)和(,M)相加后,即列数相等,从第一行到最后一行逐行与后面的array相加

flatten()

将数组转换为一维数组

1
2
3
4
5
6
7
8
9
x = np.array([[1, 2],
[2, 3],
[3, 4],
[4, 5]])
z = x.flatten()
print(z)

>>>
[1 2 2 3 3 4 4 5]

eye()

Return a 2-D array with ones on the diagonal and zeros elsewhere.

函数eye()的作用是返回一个对角线diagonal上全是1,而其他位置全为0的一个二维数组(2D-array)。

numpy.eye(N, M=None, k=0, dtype=<class ‘float’>, order=‘C’)

Parameters:
N : int,Number of rows in the output.

M : int, optional,Number of columns in the output. If None, defaults to N.

k : int, optional ——K为对角元素的索引

Index of the diagonal: 0 (the default) refers to the main diagonal, a positive value refers to an upper diagonal, and a negative value to a lower diagonal.

默认的索引为0对应的是the main diagonal, index为正值对应一个upper diagonal, index为复制对应的是lower diagonal.

1
2
3
4
5
print(np.eye(2))

>>>
[[1. 0.]
[0. 1.]]

random.multivariate_normal()

用于根据实际情况生成一个多元正态分布矩阵。

**def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None) **

其中mean和cov为必要的传参而size,check_valid以及tol为可选参数。

mean:mean是多维分布的均值维度为1;

cov:协方差矩阵(协方差基本概念)。注意:协方差矩阵必须是对称的且需为半正定矩阵;

size:指定生成的正态分布矩阵的维度(例:若size=(1, 1, 2),则输出的矩阵的shape即形状为 1X1X2XN(N为mean的长度))。

check_valid:这个参数用于决定当cov即协方差矩阵不是半正定矩阵时程序的处理方式,它一共有三个值:warn,raise以及ignore。当使用warn作为传入的参数时,如果cov不是半正定的程序会输出警告但仍旧会得到结果;当使用raise作为传入的参数时,如果cov不是半正定的程序会报错且不会计算出结果;当使用ignore时忽略这个问题即无论cov是否为半正定的都会计算出结果。3种情况的console打印结果如下:

vstack() & hstack()

拼接数组的方法:

np.vstack():在竖直方向上堆叠

np.hstack():在水平方向上平铺

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([4,5,6])
print np.vstack((arr1,arr2))

print np.hstack((arr1,arr2))

a1=np.array([[1,2],[3,4],[5,6]])
a2=np.array([[7,8],[9,10],[11,12]])
print a1
print a2
print np.hstack((a1,a2)

>>>
[[1 2 3]
[4 5 6]]
[1 2 3 4 5 6]
[[1 2]
[3 4]
[5 6]]
[[ 7 8]
[ 9 10]
[11 12]]
[[ 1 2 7 8]
[ 3 4 9 10]
[ 5 6 11 12]]

enumerate()

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])

start: 默认从0开始

1
2
3
4
5
for c, d in enumerate([3.0]):
print(c, d)

>>>
0 3.0

argmax()

argmax用法

1
2
3
4
5
6
7
8
import numpy as np
a = np.array([[1, 5, 5, 2],
[9, 6, 2, 8],
[3, 7, 9, 1]])
print(np.argmax(a, axis=0))

>>>
[1,2,2,1]
1
2
3
4
5
6
7
8
import numpy as np
a = np.array([[1, 5, 5, 2],
[9, 6, 2, 8],
[3, 7, 9, 1]])
print(np.argmax(a, axis=1))

>>>
[1,0,2]

random.rand()

numpy.random.rand(d0,d1,…,dn)

通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 无参数时,返回一个样本
x = np.random.randn()
print(x)
>>>
0.24745677216860873

# 参数为1时,返回array
x = np.random.randn(1)
print(x)

>>>
[0.66546358]

# 参数>1时,返回指定维度一组样本
x = np.random.rand(2,3)
print(x)
>>>
[[0.4608127 0.99431673 0.9204902 ]
[0.78585376 0.68346213 0.07962104]]

random.randn()

numpy.random.randn(d0,d1,…,dn)

  • randn函数返回一个或一组样本,具有标准正态分布
  • dn表格每个维度
  • 返回值为指定维度的array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 无参数时,返回一个样本
x = np.random.randn()
print(x)
>>>
0.3372003142381499

# 参数为1时,返回array
x = np.random.randn(1)
print(x)

>>>
[-0.81388974]

# 参数>1时,返回指定维度一组样本
x = np.random.randn(2,3)
print(x)

>>>
[[-0.73107015 -0.75779713 -0.13421781]
[-0.90713738 -0.26851973 -1.48609181]]

*

参考: voidcn.com/article/p-grchamdd-bwa.html

这不是NumPy特有的语法;它是Python语法.所谓的* -operator是Python语法,它在参数列表中对序列进行解包(参见 [Unpacking Argument Lists](javascript:void())).

您的示例中的用法是将形状元组解压缩为单独的参数.这是必需的,因为numpy.random.randn将任意数量的整数作为参数,而不是整数元组.

1
2
3
4
5
6
7
8
9
x = np.array([[1, 2],[2,3]])
print(x.shape)
print(*x.shape)
print(*x)

>>>
(2, 2)
2 2
[1 2] [2 3]

uniform()

random.uniform(x, y)

将随机生成一个实数,它在 [x,y] 范围内。

1
2
3
4
5
x = np.random.uniform(2,10)
print(x)

>>>
7.550599514372211
----------到结尾啦!! Hoohoo----------