NumPy基本操作,常用函数

内容索引

该小结主要介绍了NumPy数组的基本操作。

子目1中,介绍创建和索引数组,数据类型,dtype类,自定义异构数据类型。

子目2中,介绍数组的索引和切片,主要是对[]运算符的操作。

子目3中,介绍如何改变数组的维度,分别介绍了ravel函数、flatten函数、transpose函数、resize函数、reshape函数的用法。

In [1]:
Python
<span class="o">%</span><span class="k">pylab</span> inline
1
< span class = "o" > % < / span > < span class = "k" > pylab < / span > inline
Python
Populating the interactive namespace from <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/numpy" title="View all posts in numpy" target="_blank">numpy</a></span> and matplotlib
1
Populating the interactive namespace from numpy and matplotlib

ndarray是一个多维数组对象,该对象由实际的数据、描述这些数据的元数据组成,大部分数组操作仅仅修改元数据部分,而不改变底层的实际数据。

用arange函数创建数组

In [2]:
Python
<span class="n">a</span> <span class="o">=</span> <span class="n">arange</span><span class="p">(</span><span class="mi">5</span><span class="p">) </span>#生成5个元素的数组 <span class="n">a</span><span class="o">.</span><span class="n">dtype </span>#显示a的类型
1
2
3
4
< span class = "n" > a < / span > < span class = "o" >= < / span > < span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 5 < / span > < span class = "p" > )
< / span > #生成5个元素的数组
< span class = "n" > a < / span > < span class = "o" > . < / span > < span class = "n" > dtype
< / span > #显示a的类型
Out[2]:
Python
dtype('int64')
1
dtype ( 'int64' )
In [3]:
Python
<span class="n">a</span>
1
< span class = "n" > a < / span >
Out[3]:
Python
array([0, 1, 2, 3, 4])
1
array ( [ 0 , 1 , 2 , 3 , 4 ] )
In [4]:
Python
<span class="n">a</span><span class="o">.</span><span class="n">shape </span>#获取数组内是几行几列
1
2
< span class = "n" > a < / span > < span class = "o" > . < / span > < span class = "n" > shape
< / span > #获取数组内是几行几列
Out[4]:
Python
(5,)
1
( 5 , )

数组的shape属性返回一个元祖(tuple),元组中的元素即NumPy数组每一个维度的大小。

1. 创建多维数组

array函数可以依据给定的对象生成数组。 给定的对象应是类数组,如python的列表、numpy的arange函数

In [5]:
Python
<span class="n">m</span> <span class="o">=</span> <span class="n">array</span><span class="p">([</span><span class="n">arange</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="n">arange</span><span class="p">(</span><span class="mi">2</span><span class="p">)]) </span>生成一个两行两列的数组
1
2
3
< span class = "n" > m < / span > < span class = "o" >= < / span > < span class = "n" > array < / span > < span class = "p" > ( [ < / span > < span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > ) , < / span > < span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > ) ] )
 
< / span >生成一个两行两列的数组
In [6]:
Python
<span class="k">print</span> <span class="n">m</span> <span class="k">print</span> <span class="n">m</span><span class="o">.</span><span class="n">shape</span> <span class="k">print</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="k">print</span> <span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
1
2
3
4
< span class = "k" > print < / span > < span class = "n" > m < / span >
< span class = "k" > print < / span > < span class = "n" > m < / span > < span class = "o" > . < / span > < span class = "n" > shape < / span >
< span class = "k" > print < / span > < span class = "nb" > type < / span > < span class = "p" > ( < / span > < span class = "n" > m < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "nb" > type < / span > < span class = "p" > ( < / span > < span class = "n" > m < / span > < span class = "o" > . < / span > < span class = "n" > shape < / span > < span class = "p" > ) < / span >
Python
[[0 1] [0 1]] (2, 2) <type '<span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/numpy" title="View all posts in numpy" target="_blank">numpy</a></span>.ndarray'> <type 'tuple'>
1
2
3
4
5
[ [ 0 1 ]
[ 0 1 ] ]
( 2 , 2 )
< type 'numpy.ndarray' >
< type 'tuple' >

选取元素

In [7]:
Python
<span class="n">a</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">]])</span> <span class="k">print</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="k">print</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span>
1
2
3
< span class = "n" > a < / span > < span class = "o" >= < / span > < span class = "n" > array < / span > < span class = "p" > ( [ [ < / span > < span class = "mi" > 1 < / span > < span class = "p" > , < / span > < span class = "mi" > 2 < / span > < span class = "p" > ] , [ < / span > < span class = "mi" > 3 < / span > < span class = "p" > , < / span > < span class = "mi" > 4 < / span > < span class = "p" > ] ] ) < / span >
< span class = "k" > print < / span > < span class = "n" > a < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > , < / span > < span class = "mi" > 0 < / span > < span class = "p" > ] < / span >
< span class = "k" > print < / span > < span class = "n" > a < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > , < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span >
Python
1 2
1
2
1
2

NumPy数据类型

Numpy除了Python支持的整型、浮点型、复数型之外,还添加了很多其他的数据类型。

Type Remarks Character code bool_ compatible: Python bool '?' bool8 8 bits
Integers:

byte compatible: C char 'b' short compatible: C short 'h' intc compatible: C int 'i' int_ compatible: Python int 'l' longlong compatible: C long long 'q' intp large enough to fit a pointer 'p' int8 8 bits
int16 16 bits
int32 32 bits
int64 64 bits
Unsigned integers:

ubyte compatible: C unsigned char 'B' ushort compatible: C unsigned short 'H' uintc compatible: C unsigned int 'I' uint compatible: Python int 'L' ulonglong compatible: C long long 'Q' uintp large enough to fit a pointer 'P' uint8 8 bits
uint16 16 bits
uint32 32 bits
uint64 64 bits
Floating-point numbers:

half 'e' single compatible: C float 'f' double compatible: C double
float_ compatible: Python float 'd' longfloat compatible: C long float 'g' float16 16 bits
float32 32 bits
float64 64 bits
float96 96 bits, platform?
float128 128 bits, platform?
Complex floating-point numbers:

csingle 'F' complex_ compatible: Python complex 'D' clongfloat 'G' complex64 two 32-bit floats
complex128 two 64-bit floats
complex192 two 96-bit floats, platform?
complex256 two 128-bit floats, platform?
Any Python object:

object_ any Python object 'O'

每一种数据类型均有对应的类型转换函数

In [8]:
Python
<span class="k">print</span> <span class="n">float64</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="k">print</span> <span class="n">int8</span><span class="p">(</span><span class="mf">42.0</span><span class="p">)</span> <span class="k">print</span> <span class="nb">bool</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="k">print</span> <span class="nb">float</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
1
2
3
4
< span class = "k" > print < / span > < span class = "n" > float64 < / span > < span class = "p" > ( < / span > < span class = "mi" > 42 < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "n" > int8 < / span > < span class = "p" > ( < / span > < span class = "mf" > 42.0 < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "nb" > bool < / span > < span class = "p" > ( < / span > < span class = "mi" > 42 < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "nb" > float < / span > < span class = "p" > ( < / span > < span class = "bp" > True < / span > < span class = "p" > ) < / span >
Python
42.0 42 True 1.0
1
2
3
4
42.0
42
True
1.0
In [9]:
Python
<span class="n">arange</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">uint16</span><span class="p">)</span>
1
< span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 8 < / span > < span class = "p" > , < / span > < span class = "n" > dtype < / span > < span class = "o" >= < / span > < span class = "n" > uint16 < / span > < span class = "p" > ) < / span >
Out[9]:
Python
array([0, 1, 2, 3, 4, 5, 6, 7], dtype=uint16)
1
array ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] , dtype = uint16 )

复数不能转换成整数和浮点数

Numpy数组中每一个元素均为相同的数据类型,现在给出单个元素所占字节

In [10]:
Python
<span class="n">a</span><span class="o">.</span><span class="n">dtype</span>
1
< span class = "n" > a < / span > < span class = "o" > . < / span > < span class = "n" > dtype < / span >
Out[10]:
Python
dtype('int32')
1
dtype ( 'int32' )
In [11]:
Python
<span class="n">a</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">itemsize</span>
1
< span class = "n" > a < / span > < span class = "o" > . < / span > < span class = "n" > dtype < / span > < span class = "o" > . < / span > < span class = "n" > itemsize < / span >
Out[11]:
Python
4
1
4

dtype类的属性

In [12]:
Python
<span class="n">t</span> <span class="o">=</span> <span class="n">dtype</span><span class="p">(</span><span class="s1">'float64'</span><span class="p">)</span> <span class="k">print</span> <span class="n">t</span><span class="o">.</span><span class="n">char</span> <span class="k">print</span> <span class="n">t</span><span class="o">.</span><span class="n">type</span> <span class="k">print</span> <span class="n">t</span><span class="o">.</span><span class="n">str</span>
1
2
3
4
< span class = "n" > t < / span > < span class = "o" >= < / span > < span class = "n" > dtype < / span > < span class = "p" > ( < / span > < span class = "s1" > 'float64' < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "n" > t < / span > < span class = "o" > . < / span > < span class = "n" > char < / span >
< span class = "k" > print < / span > < span class = "n" > t < / span > < span class = "o" > . < / span > < span class = "n" > type < / span >
< span class = "k" > print < / span > < span class = "n" > t < / span > < span class = "o" > . < / span > < span class = "n" > str < / span >
Python
d <type 'numpy.float64'> <f8
1
2
3
d
< type 'numpy.float64' >
< f8

str属性可以给出数据类型的字符串表示,该字符串的首个字符表示字节序,然后是字符编码,然后是所占字节数 字节序是指位长为32和64的字(word)存储的顺序,包括大端序(big-endian)和小端序(little-endian)。 大端序是将最高位字节存储在最低的内存地址处,用>表示;与之相反,小端序是将最低位字节存储在最低的内存地址处,用<表示。

创建自定义数据类型

自定义数据类型是一种异构数据类型,可以当做用来记录电子表格或数据库中一行数据的结构。

下面我们创建一种自定义的异构数据类型,该数据类型包括一个用字符串记录的名字、一个用整数记录的数字以及一个用浮点数记录的价格。

In [13]:
Python
<span class="n">t</span> <span class="o">=</span> <span class="n">dtype</span><span class="p">([(</span><span class="s1">'name'</span><span class="p">,</span> <span class="n">str_</span><span class="p">,</span> <span class="mi">40</span><span class="p">),</span> <span class="p">(</span><span class="s1">'numitems'</span><span class="p">,</span> <span class="n">int32</span><span class="p">),</span> <span class="p">(</span><span class="s1">'price'</span><span class="p">,</span> <span class="n">float32</span><span class="p">)])</span>
1
< span class = "n" > t < / span > < span class = "o" >= < / span > < span class = "n" > dtype < / span > < span class = "p" > ( [ ( < / span > < span class = "s1" > 'name' < / span > < span class = "p" > , < / span > < span class = "n" > str_ < / span > < span class = "p" > , < / span > < span class = "mi" > 40 < / span > < span class = "p" > ) , < / span > < span class = "p" > ( < / span > < span class = "s1" > 'numitems' < / span > < span class = "p" > , < / span > < span class = "n" > int32 < / span > < span class = "p" > ) , < / span > < span class = "p" > ( < / span > < span class = "s1" > 'price' < / span > < span class = "p" > , < / span > < span class = "n" > float32 < / span > < span class = "p" > ) ] ) < / span >
In [14]:
Python
<span class="n">t</span>
1
< span class = "n" > t < / span >
Out[14]:
Python
dtype([('name', 'S40'), ('numitems', '<i4'), ('price', '<f4')])
1
dtype ( [ ( 'name' , 'S40' ) , ( 'numitems' , '<i4' ) , ( 'price' , '<f4' ) ] )
In [15]:
Python
<span class="n">t</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
1
< span class = "n" > t < / span > < span class = "p" > [ < / span > < span class = "s1" > 'name' < / span > < span class = "p" > ] < / span >
Out[15]:
Python
dtype('S40')
1
dtype ( 'S40' )
In [16]:
Python
<span class="n">itemz</span> <span class="o">=</span> <span class="n">array</span><span class="p">([(</span><span class="s1">'Meaning of life DVD'</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mf">3.14</span><span class="p">),</span> <span class="p">(</span><span class="s1">'Butter'</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="mf">2.72</span><span class="p">)],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">t</span><span class="p">)</span>
1
< span class = "n" > itemz < / span > < span class = "o" >= < / span > < span class = "n" > array < / span > < span class = "p" > ( [ ( < / span > < span class = "s1" > 'Meaning of life DVD' < / span > < span class = "p" > , < / span > < span class = "mi" > 32 < / span > < span class = "p" > , < / span > < span class = "mf" > 3.14 < / span > < span class = "p" > ) , < / span > < span class = "p" > ( < / span > < span class = "s1" > 'Butter' < / span > < span class = "p" > , < / span > < span class = "mi" > 13 < / span > < span class = "p" > , < / span > < span class = "mf" > 2.72 < / span > < span class = "p" > ) ] , < / span > < span class = "n" > dtype < / span > < span class = "o" >= < / span > < span class = "n" > t < / span > < span class = "p" > ) < / span >
In [17]:
Python
<span class="n">itemz</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
1
< span class = "n" > itemz < / span > < span class = "p" > [ < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span >
Out[17]:
Python
('Butter', 13, 2.7200000286102295)
1
( 'Butter' , 13 , 2.7200000286102295 )

2. 数组的索引和切片

In [18]:
Python
<span class="n">a</span> <span class="o">=</span> <span class="n">arange</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span> <span class="c1">#下标0-7, 以2为步长</span> <span class="k">print</span> <span class="n">a</span><span class="p">[:</span><span class="mi">7</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="c1">#以负数下标翻转数组</span> <span class="k">print</span> <span class="n">a</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">] Out[21]: array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])</span> <span class="k">print</span> <span class="n">a</span><span class="p">[::</span><span class="o">-</span><span class="mi">2</span><span class="p">] Out[22]: array([9, 7, 5, 3, 1])</span>
1
2
3
4
5
6
7
8
9
< span class = "n" > a < / span > < span class = "o" >= < / span > < span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 9 < / span > < span class = "p" > ) < / span >
< span class = "c1" > #下标0-7, 以2为步长</span>
< span class = "k" > print < / span > < span class = "n" > a < / span > < span class = "p" > [ : < / span > < span class = "mi" > 7 < / span > < span class = "p" > : < / span > < span class = "mi" > 2 < / span > < span class = "p" > ] < / span >
 
< span class = "c1" > #以负数下标翻转数组</span>
< span class = "k" > print < / span > < span class = "n" > a < / span > < span class = "p" > [ :: < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > ]
Out [ 21 ] : array ( [ 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 ] ) < / span >
< span class = "k" > print < / span > < span class = "n" > a < / span > < span class = "p" > [ :: < / span > < span class = "o" > - < / span > < span class = "mi" > 2 < / span > < span class = "p" > ]
Out [ 22 ] : array ( [ 9 , 7 , 5 , 3 , 1 ] ) < / span >

多维数组的切片和索引

In [19]:
Python
<span class="n">b</span> <span class="o">=</span> <span class="n">arange</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span> <span class="k">print</span> <span class="n">b</span><span class="o">.</span><span class="n">shape</span> <span class="k">print</span> <span class="n">b</span>
1
2
3
< span class = "n" > b < / span > < span class = "o" >= < / span > < span class = "n" > arange < / span > < span class = "p" > ( < / span > < span class = "mi" > 24 < / span > < span class = "p" > ) < / span > < span class = "o" > . < / span > < span class = "n" > reshape < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > , < / span > < span class = "mi" > 3 < / span > < span class = "p" > , < / span > < span class = "mi" > 4 < / span > < span class = "p" > ) < / span >
< span class = "k" > print < / span > < span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > shape < / span >
< span class = "k" > print < / span > < span class = "n" > b < / span >
Python
(2, 3, 4) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]
1
2
3
4
5
6
7
8
( 2 , 3 , 4 )
[ [ [ 0    1    2    3 ]
   [ 4    5    6    7 ]
   [ 8    9 10 11 ] ]
 
[ [ 12 13 14 15 ]
   [ 16 17 18 19 ]
   [ 20 21 22 23 ] ] ]

用三维坐标选定任意一个房间,即楼层、行号、列号

In [20]:
Python
<span class="c1">#选取第一层楼所有房间</span> <span class="k">print</span> <span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">print</span> <span class="k">print</span> <span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span>
1
2
3
4
< span class = "c1" > #选取第一层楼所有房间</span>
< span class = "k" > print < / span > < span class = "n" > b < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > ] < / span >
< span class = "k" > print < / span >
< span class = "k" > print < / span > < span class = "n" > b < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > , < / span > < span class = "p" > : , < / span > < span class = "p" > : ] < / span >
Python
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
1
2
3
4
5
6
7
[ [ 0    1    2    3 ]
[ 4    5    6    7 ]
[ 8    9 10 11 ] ]
 
[ [ 0    1    2    3 ]
[ 4    5    6    7 ]
[ 8    9 10 11 ] ]
In [21]:
Python
<span class="c1">#多个冒号用一个省略号代替</span> <span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
1
2
< span class = "c1" > #多个冒号用一个省略号代替</span>
< span class = "n" > b < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > , < / span > < span class = "o" > . . . < / span > < span class = "p" > ] < / span >
Out[21]:
Python
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
1
2
3
array ( [ [ 0 ,    1 ,    2 ,    3 ] ,
       [ 4 ,    5 ,    6 ,    7 ] ,
       [ 8 ,    9 , 10 , 11 ] ] )
In [22]:
Python
<span class="c1">#间隔选元素</span> <span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,::</span><span class="mi">2</span><span class="p">] </span>一层楼,第一个房间 步长是2
1
2
3
< span class = "c1" > #间隔选元素</span>
< span class = "n" > b < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > , < / span > < span class = "mi" > 1 < / span > < span class = "p" > , :: < / span > < span class = "mi" > 2 < / span > < span class = "p" > ]
< / span >一层楼 ,第一个房间 步长是 2
Out[22]:
Python
array([4, 6])
1
array ( [ 4 , 6 ] )
In [23]:
Python
<span class="c1">#多维数组执行翻转一维数组的命令,将在最前面的维度上翻转元素的顺序</span> <span class="n">b</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1
2
< span class = "c1" > #多维数组执行翻转一维数组的命令,将在最前面的维度上翻转元素的顺序</span>
< span class = "n" > b < / span > < span class = "p" > [ :: < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span >
Out[23]:
Python
array([[[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]], [[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]])
1
2
3
4
5
6
7
array ( [ [ [ 12 , 13 , 14 , 15 ] ,
         [ 16 , 17 , 18 , 19 ] ,
         [ 20 , 21 , 22 , 23 ] ] ,
 
       [ [ 0 ,    1 ,    2 ,    3 ] ,
         [ 4 ,    5 ,    6 ,    7 ] ,
         [ 8 ,    9 , 10 , 11 ] ] ] )
In [24]:
Python
<span class="n">b</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">,::</span><span class="o">-</span><span class="mi">1</span><span class="p">,::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1
< span class = "n" > b < / span > < span class = "p" > [ :: < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > , :: < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > , :: < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span >
Out[24]:
Python
array([[[23, 22, 21, 20], [19, 18, 17, 16], [15, 14, 13, 12]], [[11, 10, 9, 8], [ 7, 6, 5, 4], [ 3, 2, 1, 0]]])
1
2
3
4
5
6
7
array ( [ [ [ 23 , 22 , 21 , 20 ] ,
         [ 19 , 18 , 17 , 16 ] ,
         [ 15 , 14 , 13 , 12 ] ] ,
 
       [ [ 11 , 10 ,    9 ,    8 ] ,
         [ 7 ,    6 ,    5 ,    4 ] ,
         [ 3 ,    2 ,    1 ,    0 ] ] ] )

3. 改变数组的维度

ravel 完成展平操作

In [25]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">ravel</span><span class="p">() </span>#所有的列表转成一个列表
1
2
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > ravel < / span > < span class = "p" > ( )
< / span > #所有的列表转成一个列表
Out[25]:
Python
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])
1
2
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 ] )

flatten 也是展平

flatten函数会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图(view)

In [26]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
1
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > flatten < / span > < span class = "p" > ( ) < / span >
Out[26]:
Python
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])
1
2
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 ] )

用元组设置维度

In [27]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
1
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > shape < / span > < span class = "o" >= < / span > < span class = "p" > ( < / span > < span class = "mi" > 6 < / span > < span class = "p" > , < / span > < span class = "mi" > 4 < / span > < span class = "p" > ) < / span >
In [28]:
Python
<span class="n">b</span>
1
< span class = "n" > b < / span >
Out[28]:
Python
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]])
1
2
3
4
5
6
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 ] ] )

transpose转置矩阵

In [29]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span>
1
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > transpose < / span > < span class = "p" > ( ) < / span >
Out[29]:
Python
array([[ 0, 4, 8, 12, 16, 20], [ 1, 5, 9, 13, 17, 21], [ 2, 6, 10, 14, 18, 22], [ 3, 7, 11, 15, 19, 23]])
1
2
3
4
array ( [ [ 0 ,    4 ,    8 , 12 , 16 , 20 ] ,
       [ 1 ,    5 ,    9 , 13 , 17 , 21 ] ,
       [ 2 ,    6 , 10 , 14 , 18 , 22 ] ,
       [ 3 ,    7 , 11 , 15 , 19 , 23 ] ] )

resize和reshape函数功能一样 但resize会直接改变所操作的数组

In [30]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span>
1
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > reshape < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > , < / span > < span class = "mi" > 3 < / span > < span class = "p" > , < / span > < span class = "mi" > 4 < / span > < span class = "p" > ) < / span >
Out[30]:
Python
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]]])
1
2
3
4
5
6
7
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 ] ] ] )
In [31]:
Python
<span class="n">b</span>
1
< span class = "n" > b < / span >
Out[31]:
Python
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]])
1
2
3
4
5
6
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 ] ] )
In [32]:
Python
<span class="n">b</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">12</span><span class="p">)</span>
1
< span class = "n" > b < / span > < span class = "o" > . < / span > < span class = "n" > resize < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > , < / span > < span class = "mi" > 12 < / span > < span class = "p" > ) < / span >
In [33]:
Python
<span class="n">b</span>
1
< span class = "n" > b < / span >
Out[33]:
Python
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]])
1
2
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 ] ] )



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值