numpy's main object is the homogeneous multidimensional array. it is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers. in numpy dimensions are called axes. the number of axes is rank.
for example, the coordinates of a point in 3d space [1, 2, 1] is an array of rank 1, because it has one axis. that axis has a length of 3. in the example pictured below, the array has rank 2 (it is 2-dimensional). the first dimension (axis) has a length of 2, the second dimension has a length of 3.
1
2
|
[[ 1. , 0. , 0. ], [ 0. , 1. , 2. ]] |
ndarray.ndim
数组轴的个数,在python的世界中,轴的个数被称作秩
1
2
3
4
5
6
7
8
9
|
>> x = np.reshape(np.arange( 24 ), ( 2 , 3 , 4 )) # 也即 2 行 3 列的 4 个平面(plane) >> x 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 ]]]) |
shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。
shape(x)
(2,3,4)
shape(x)[0]
2
或者
x.shape[0]
2
再来分别看每一个平面的构成:
1
2
3
4
5
6
7
8
9
10
11
12
|
>> x[:, :, 0 ] array([[ 0 , 4 , 8 ], [ 12 , 16 , 20 ]]) >> x[:, :, 1 ] array([[ 1 , 5 , 9 ], [ 13 , 17 , 21 ]]) >> x[:, :, 2 ] array([[ 2 , 6 , 10 ], [ 14 , 18 , 22 ]]) >> x[:, :, 3 ] array([[ 3 , 7 , 11 ], [ 15 , 19 , 23 ]]) |
也即在对 np.arange(24)(0, 1, 2, 3, ..., 23) 进行重新的排列时,在多维数组的多个轴的方向上,先分配最后一个轴(对于二维数组,即先分配行的方向,对于三维数组即先分配平面的方向)
reshpae,是数组对象中的方法,用于改变数组的形状。
二维数组
1
2
3
4
5
6
7
8
|
#!/usr/bin/env python # coding=utf-8 import numpy as np a = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) print a d = a.reshape(( 2 , 4 )) print d |
三维数组
1
2
3
4
5
6
7
8
|
#!/usr/bin/env python # coding=utf-8 import numpy as np a = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) print a f = a.reshape(( 2 , 2 , 2 )) print f |
形状变化的原则是数组元素不能发生改变,比如这样写就是错误的,因为数组元素发生了变化。
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python # coding=utf-8 import numpy as np a = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) print a print a.dtype e = a.reshape(( 2 , 2 )) print e |
注意:通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变。
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # coding=utf-8 import numpy as np a = np.array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]) print a e = a.reshape(( 2 , 4 )) print e a[ 1 ] = 100 print a print e |
python中reshape函数参数-1的意思
1
2
3
4
5
6
7
8
9
10
|
a = np.arange( 0 , 60 , 10 ) >>>a array([ 0 , 10 , 20 , 30 , 40 , 50 ]) >>>a.reshape( - 1 , 1 ) array([[ 0 ], [ 10 ], [ 20 ], [ 30 ], [ 40 ], [ 50 ]]) |
如果写成a.reshape(1,1)就会报错
valueerror:cannot reshape array of size 6 into shape (1,1)
1
2
3
4
5
|
>>> a = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> np.reshape(a, ( 3 , - 1 )) # the unspecified value is inferred to be 2 array([[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]]) |
-1表示我懒得计算该填什么数字,由python通过a和其他的值3推测出来。
1
2
3
4
5
6
7
|
# 下面是两张2*3大小的照片(不知道有几张照片用-1代替),如何把所有二维照片给摊平成一维 >>> image = np.array([[[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]], [[ 1 , 1 , 1 ], [ 1 , 1 , 1 ]]]) >>> image.shape ( 2 , 2 , 3 ) >>> image.reshape(( - 1 , 6 )) array([[ 1 , 2 , 3 , 4 , 5 , 6 ], [ 1 , 1 , 1 , 1 , 1 , 1 ]]) |
以上这篇对numpy中轴与维度的理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u014082714/article/details/75946302