ndarray定义
查看这个文章 NumPy Ndarray 对象及数据类型发现ndarray的定义
NumPy提供了两种基本的对象:ndarray(N-dimensional array object)
和 ufunc(universal function object)
。
ndarray(下文统一称之为数组)是存储单一数据类型的n维数组,
ufunc 则是能够对数组进行处理的函数。
ndarray的shape属性
查看文章Python numpy ndarray.shape以及ndarray.ndim问题找到了ndarray的shape属性表示的意义是是每一层(每一个[])元素的个数,由外向内。比如
c=np.array(
[
[
[[1],[1]],
[[1],[1]],
[[1],[1]]
],
[
[[1],[1]],
[[1],[1]],
[[1],[1]]
],
[
[[1],[1]],
[[1],[1]],
[[1],[1]]
],
[
[[1],[1]],
[[1],[1]],
[[1],[1]]
]
]
)
print('shape:'+str(c.shape)) //shape:(4, 3, 2, 1)
比如:
shape=(24,2) #表示二维数组 ,24行2列
shape=(24,) #表示一维数组,数组中有24个元素
np.reshape函数
官方文档标准格式是np.reshape(a, newshape, order='C')
,order可以选择{‘C’, ‘F’, ‘A’},表示以不同的顺序进行矩阵填充。默认是’C’,具体参照numpy中的reshape函数详解。
C是就是从最后一维开始,按行优先填充为需要的矩阵,如下:
np.newaxis
参考博客np.newaxis的功能: 插入新维度
列1:
a=np.array([1,2,3])
aa=a[:,np.newaxis]
print(aa.shape) #(3, 1)
print (aa) #[[1]
[2]
[3]]
列2:
a=np.array([1,2,3])
aa=a[np.newaxis,:]
print(aa.shape) #(1, 5)
print (aa) #[[1 2 3 4 5]]
np.mean
numpy.mean(a, axis, dtype, out,keepdims ) #求均值,其中axis, dtype, out,keepdims都是可选参数
#a是包含期望均值的数字的数组
#axis计算平均值的一个或多个轴。默认情况下,计算展平阵列的平均值
#dtype用于计算平均值的类型
#out,默认为none,用于放置结果的备用输出数组
经常操作的参数为axis,以m * n矩阵举例:
axis 不设置值,对 m*n 个数求均值,返回一个实数
axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
axis =1 :压缩列,对各行求均值,返回 m *1 矩阵
但是实际运行的时候,发现结果不是一行数组,是将最外层的数据求平均的少一维的数组:
import numpy as np
a=np.empty([3,2,1])
print(a) #shape=(3,2,1)
print(a.mean(axis=0)) #shape=(2,1)
a>>>[[[4.45038538e-307]
[2.33646676e-307]]
[[8.45599366e-307]
[1.37962388e-306]]
[[3.44902066e-307]
[4.67287579e-307]]]
a.mean(axis=0)>>>[[5.45179990e-307]
[6.93519379e-307]]
np.std
numpy.std(a, axis=None, dtype=None, out=None, ddof=0) //计算沿指定轴的标准差。返回数据的标准差
a:array_like,需计算标准差的数组
axis: int, 可选,计算标准差的轴。默认情况是计算扁平数组的标准偏差。
dtype: dtype, 可选,用于计算标准差的类型。对于整数类型的数组,缺省值为Float 64,对于浮点数类型的数组,它与数组类型相同。
out: ndarray, 可选,将结果放置在其中的替代输出数组。它必须具有与预期输出相同的形状,但如果有必要,类型(计算值的类型)将被转换。
ddof: int, 可选,Delta的自由度
标准差计算公式:
S
2
=
(
x
1
−
x
ˉ
)
2
+
(
x
2
−
x
ˉ
)
2
+
.
.
.
+
(
x
n
−
x
ˉ
)
2
n
S^2=\sqrt{\frac{(x_1-\bar{x})^2+(x_2-\bar{x})^2+...+(x_n-\bar{x})^2}{n}}
S2=n(x1−xˉ)2+(x2−xˉ)2+...+(xn−xˉ)2
np.concatenate
参考博客找到官方解释定义
concatenate((a1, a2, ...), axis=0)
其中传入参数必须是一个多个数组的元组或者列表
axis表示拼接方向,0表示保留列,横向拼接,1表示保留行 纵向拼接。
In [23]: a = np.array([[1, 2], [3, 4]])
In [24]: b = np.array([[5, 6]])
In [25]: np.concatenate((a, b), axis=0)
Out[25]:
array([[1, 2],
[3, 4],
[5, 6]])
意思就是axis=0时,两个数组的列要相同,axis=1时,两个数组的行要相同。
列表数组切片
列表切片
参考博客可知:
python中符合序列的有序序列都支持切片,例如列表、字符串、元祖。
格式:【start:end:step】
start:开始索引;end:结束索引;step:步长(步长为正时,从左到右索引,正序取值;步长为负时,从右到左索引,倒序取值),取不到结束位。
示列代码:
a = [1,2,3,4,5,6]
a[:3:1] #默认从0开始
>>>[1,2,3]
a[:3] #默认步长为 1
>>>[1,2,3]
a[:-4:-1]
>>>[6, 5, 4] #默认从 -1 开始
a[3:0:-1]
>>>[4,3,2] #倒序索引
数组切片(数组形式,若是一个大列表,可以np.array(list)转成数组)
1. 二维数组,X【行,列】
对于X[:,0] ,取二维数组中第一列所有行的数据
对于X[1,:],取二维数组中第二行所有列的数据
对于X[:,m:n] ,取二维数组中第m列到第n-1列所有行的数据
对于X[m:n,:],取二维数组中第m行到第n-1行所有列的数据
2. 三维数组,X【楼层,行,列】
创建一个三维数组:
a = np.arange(24).reshape(2,3,4)
print(a)
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
a[0,0,0]
>>>0
a[:,0,0]
>>>array([ 0, 12])
a[0]
>>>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
a[:,:,2:4]
>>>array([[[ 2, 3],
[ 6, 7],
[10, 11]],
[[14, 15],
[18, 19],
[22, 23]]])
注:以上数组形式的切片方法,在矩阵中同样适用。但是,若要取某个准确的值时,比如说第一列,第二行这一准确值时,矩阵的话,最好用mat[1,2],而数组的话,既可以用array[1,2],也可以用array[1][2] 。
numpy.empty
参考博客empty的定义:
numpy.empty(shape, dtype=float, order=‘C’) 3根据给定的维度和数值类型返回一个新的数组,不会给数组元素值设置为0.
#shape 整数或者整数组成的元组
#dtype 数值类型,可选参数
#order {‘C’,'F'},可选参数(在内存中以(C)行(F)列顺序存储多维数据)
#返回值是一个n维的数组
列:
import numpy as np
a=np.empty([3,2,1])
print(a)
结果(每次运行结果都不一样):
[[[3.33772792e-307]
[4.22786102e-307]]
[[2.78145267e-307]
[4.00537061e-307]]
[[9.45656391e-308]
[0.00000000e+000]]]