Memanipulasi nombor dalam Python dengan NumPy

WBOY
Lepaskan: 2023-04-15 17:55:03
ke hadapan
1422 orang telah melayarinya

Memanipulasi nombor dalam Python dengan NumPy

Artikel ini membincangkan pemasangan NumPy dan kemudian mencipta, membaca dan mengisih tatasusunan NumPy.

NumPy (iaitu. . Saya memperkenalkannya dalam nota saya tentang jenis data Python, yang merupakan susunan magnitud lebih cepat daripada senarai Python. NumPy digunakan agak kerap dalam analisis data dan pengkomputeran saintifik. Saya akan meliputi pemasangan NumPy, kemudian mencipta, membaca dan mengisih tatasusunan NumPy. Tatasusunan NumPy juga dipanggil ndarrays, singkatan untuk tatasusunan N-dimensi. Memasang NumPy

Menggunakan

untuk memasang pakej NumPy adalah sangat mudah dan boleh dipasang seperti pakej perisian lain:

Selepas memasang pakej NumPy, cuma Ia perlu diimport ke dalam fail Python anda: pip

<ol><li><code><span>pip install numpy</span></code></li></ol>
Salin selepas log masuk
Ia adalah konvensyen standard untuk mengimport

sebagai

, tetapi anda boleh menggunakannya dan bukannya
<ol><li><code><span>import</span><span> numpy </span><span>as</span><span> np</span></code></li></ol>
Salin selepas log masuk
sebaliknya awak nak.

numpyMengapa menggunakan NumPy? Kerana ia adalah susunan magnitud lebih cepat daripada senarai Python npnpApabila ia melibatkan pemprosesan nombor yang besar, NumPy adalah susunan magnitud lebih cepat daripada senarai Python biasa. Untuk melihat seberapa pantas ia sebenarnya, saya mula-mula mengukur masa untuk operasi

dan

pada senarai Python biasa.

Saya akan mula-mula membuat senarai Python dengan 999,999,999 item: min()max()

Sekarang saya akan mengukur masa untuk mencari nilai minimum dalam senarai ini:

<ol>
<li><code><span>>>></span><span> my_list </span><span>=</span><span> range</span><span>(</span><span>1</span><span>,</span><span> </span><span>1000000000</span><span>)</span></code></li>
<li><code><span>>>></span><span> len</span><span>(</span><span>my_list</span><span>)</span></code></li>
<li><code><span>999999999</span></code></li>
</ol>
Salin selepas log masuk
Ini mengambil masa kira-kira 27,007 milisaat, iaitu kira-kira

27 saat

. Ini adalah masa yang lama. Sekarang saya cuba mencari masa untuk mencari nilai maksimum:
<ol>
<li><code><span>>>></span><span> start </span><span>=</span><span> </span><span>time</span><span>.</span><span>time</span><span>()</span></code></li>
<li><code><span>>>></span><span> min</span><span>(</span><span>my_list</span><span>)</span></code></li>
<li><code><span>1</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>'Time elapsed in milliseconds: '</span><span> </span><span>+</span><span> str</span><span>((</span><span>time</span><span>.</span><span>time</span><span>()</span><span> </span><span>-</span><span> start</span><span>)</span><span> </span><span>*</span><span> </span><span>1000</span><span>))</span></code></li>
<li><code><span>Time</span><span> elapsed </span><span>in</span><span> milliseconds</span><span>:</span><span> </span><span>27007.00879096985</span></code></li>
</ol>
Salin selepas log masuk

Ini mengambil masa kira-kira 28,111 milisaat, iaitu kira-kira 28 saat

.
<ol>
<li><code><span>>>></span><span> start </span><span>=</span><span> </span><span>time</span><span>.</span><span>time</span><span>()</span></code></li>
<li><code><span>>>></span><span> max</span><span>(</span><span>my_list</span><span>)</span></code></li>
<li><code><span>999999999</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>'Time elapsed in milliseconds: '</span><span> </span><span>+</span><span> str</span><span>((</span><span>time</span><span>.</span><span>time</span><span>()</span><span> </span><span>-</span><span> start</span><span>)</span><span> </span><span>*</span><span> </span><span>1000</span><span>))</span></code></li>
<li><code><span>Time</span><span> elapsed </span><span>in</span><span> milliseconds</span><span>:</span><span> </span><span>28111.071348190308</span></code></li>
</ol>
Salin selepas log masuk

Kini saya cuba mencari masa minimum dan maksimum menggunakan NumPy:

Ia mengambil masa kira-kira 1151ms untuk mencari masa minimum dan 1114ms untuk mencari maksimum. Ini lebih kurang

1 saat

.
<ol>
<li><code><span>>>></span><span> my_list </span><span>=</span><span> np</span><span>.</span><span>arange</span><span>(</span><span>1</span><span>,</span><span> </span><span>1000000000</span><span>)</span></code></li>
<li><code><span>>>></span><span> len</span><span>(</span><span>my_list</span><span>)</span></code></li>
<li><code><span>999999999</span></code></li>
<li><code><span>>>></span><span> start </span><span>=</span><span> </span><span>time</span><span>.</span><span>time</span><span>()</span></code></li>
<li><code><span>>>></span><span> my_list</span><span>.</span><span>min</span><span>()</span></code></li>
<li><code><span>1</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>'Time elapsed in milliseconds: '</span><span> </span><span>+</span><span> str</span><span>((</span><span>time</span><span>.</span><span>time</span><span>()</span><span> </span><span>-</span><span> start</span><span>)</span><span> </span><span>*</span><span> </span><span>1000</span><span>))</span></code></li>
<li><code><span>Time</span><span> elapsed </span><span>in</span><span> milliseconds</span><span>:</span><span> </span><span>1151.1778831481934</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> start </span><span>=</span><span> </span><span>time</span><span>.</span><span>time</span><span>()</span></code></li>
<li><code><span>>>></span><span> my_list</span><span>.</span><span>max</span><span>()</span></code></li>
<li><code><span>999999999</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>'Time elapsed in milliseconds: '</span><span> </span><span>+</span><span> str</span><span>((</span><span>time</span><span>.</span><span>time</span><span>()</span><span> </span><span>-</span><span> start</span><span>)</span><span> </span><span>*</span><span> </span><span>1000</span><span>))</span></code></li>
<li><code><span>Time</span><span> elapsed </span><span>in</span><span> milliseconds</span><span>:</span><span> </span><span>1114.8970127105713</span></code></li>
</ol>
Salin selepas log masuk

Seperti yang anda lihat, menggunakan NumPy boleh mengurangkan masa untuk mencari nilai minimum dan maksimum senarai kira-kira 1 bilion nilai daripada kira-kira 28 saat kepada 1 saat . Ini adalah kuasa NumPy.

Mencipta ndarray menggunakan senarai PythonTerdapat beberapa cara untuk mencipta ndarray dalam NumPy.

Anda boleh mencipta ndarray dengan menggunakan senarai elemen:

Dengan definisi ndarray di atas, saya akan menyemak beberapa perkara. Pertama, jenis pembolehubah yang ditakrifkan di atas ialah

. Ini adalah jenis untuk semua ndarray NumPy:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span>1</span><span> </span><span>2</span><span> </span><span>3</span><span> </span><span>4</span><span> </span><span>5</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

Satu lagi perkara yang perlu diperhatikan di sini ialah "numpy.ndarraybentuk

bentuk
<ol>
<li><code><span>>>></span><span> type</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span><span>class</span><span> </span><span>'numpy.ndarray'</span><span>></span></span></code></li>
</ol>
Salin selepas log masuk

". Bentuk ndarray ialah panjang setiap dimensi ndarray. Seperti yang anda lihat, bentuk ialah . Ini bermakna mengandungi dimensi (paksi) dengan 5 elemen. my_ndarray(5,)Bilangan dimensi dalam tatasusunan dipanggil "my_ndarraykedudukan

kedudukan
<ol>
<li><code><span>>>></span><span> np</span><span>.</span><span>shape</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>(</span><span>5</span><span>,)</span></code></li>
</ol>
Salin selepas log masuk

". Jadi pangkat ndarray di atas ialah 1. Saya akan mentakrifkan ndarray lain sebagai ndarray berbilang dimensi. Jadi apakah bentuknya? Lihat di bawah:

Ini adalah ndarray peringkat 2. Satu lagi sifat untuk diperiksa ialah my_ndarray2, iaitu jenis data. Menyemak ndarray kami untuk

memberikan kami hasil berikut:
<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([(</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>),</span><span> </span><span>(</span><span>4</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>6</span><span>)])</span></code></li>
<li><code><span>>>></span><span> np</span><span>.</span><span>shape</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>(</span><span>2</span><span>,</span><span> </span><span>3</span><span>)</span></code></li>
</ol>
Salin selepas log masuk

dtypedtype bermakna ndarray kami terdiri daripada integer 64-bit. NumPy tidak boleh mencipta ndarray jenis bercampur, yang mesti mengandungi unsur hanya satu jenis. Jika anda mentakrifkan ndarray yang mengandungi jenis elemen campuran, NumPy secara automatik akan menukar semua jenis elemen kepada jenis elemen tertinggi yang boleh mengandungi semua elemen.

<ol>
<li><code><span>>>></span><span> my_ndarray</span><span>.</span><span>dtype</span></code></li>
<li><code><span>dtype</span><span>(</span><span>'int64'</span><span>)</span></code></li>
</ol>
Salin selepas log masuk
Contohnya, mencipta jujukan campuran

dan int64 akan mencipta ndarray

:

intfloat Selain itu, menetapkan salah satu elemen kepada float64 akan Mencipta ndarray rentetan dengan

bersamaan dengan
<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>2.0</span><span>,</span><span> </span><span>3</span><span>])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[</span><span>1.</span><span> </span><span>2.</span><span> </span><span>3.</span><span>]</span></code></li>
<li><code><span>>>></span><span> my_ndarray2</span><span>.</span><span>dtype</span></code></li>
<li><code><span>dtype</span><span>(</span><span>'float64'</span><span>)</span></code></li>
</ol>
Salin selepas log masuk
, bermakna ndarray kami mengandungi rentetan unicode:

stringdtype<u21> Atribut akan menunjukkan jumlah bilangan elemen yang terdapat dalam ndarray kami: </u21>

<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>'2'</span><span>,</span><span> </span><span>3</span><span>])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[</span><span>'1'</span><span> </span><span>'2'</span><span> </span><span>'3'</span><span>]</span></code></li>
<li><code><span>>>></span><span> my_ndarray2</span><span>.</span><span>dtype</span></code></li>
<li><code><span>dtype</span><span>(</span><span>'<u21><span>)</span></u21></span></code></li>
</ol>
Salin selepas log masuk

Mencipta ndarray menggunakan kaedah NumPysize

Jika anda tidak mahu menggunakan senarai terus untuk mencipta ndarray, terdapat beberapa kaedah NumPy yang boleh anda gunakan untuk menciptanya.
<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>])</span></code></li>
<li><code><span>>>></span><span> my_ndarray</span><span>.</span><span>size</span></code></li>
<li><code><span>5</span></code></li>
</ol>
Salin selepas log masuk

Anda boleh menggunakan

untuk mencipta ndarray yang diisi dengan sifar. Ia memerlukan "bentuk" sebagai hujah, iaitu senarai yang mengandungi bilangan baris dan lajur. Ia juga boleh menerima parameter

pilihan, iaitu jenis data ndarray:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>zeros</span><span>([</span><span>2</span><span>,</span><span>3</span><span>],</span><span> dtype</span><span>=</span><span>int</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[[</span><span>0</span><span> </span><span>0</span><span> </span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>0</span><span> </span><span>0</span><span> </span><span>0</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

你可以使用 np. ones() 来创建一个填满 1 的 ndarray:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>ones</span><span>([</span><span>2</span><span>,</span><span>3</span><span>],</span><span> dtype</span><span>=</span><span>int</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[[</span><span>1</span><span> </span><span>1</span><span> </span><span>1</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>1</span><span> </span><span>1</span><span> </span><span>1</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

你可以使用 np.full() 来给 ndarray 填充一个特定的值:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>full</span><span>([</span><span>2</span><span>,</span><span>3</span><span>],</span><span> </span><span>10</span><span>,</span><span> dtype</span><span>=</span><span>int</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[[</span><span>10</span><span> </span><span>10</span><span> </span><span>10</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>10</span><span> </span><span>10</span><span> </span><span>10</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

你可以使用 np.eye() 来创建一个单位矩阵 / ndarray,这是一个沿主对角线都是 1 的正方形矩阵。正方形矩阵是一个行数和列数相同的矩阵:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>eye</span><span>(</span><span>3</span><span>,</span><span> dtype</span><span>=</span><span>int</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[[</span><span>1</span><span> </span><span>0</span><span> </span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>0</span><span> </span><span>1</span><span> </span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>0</span><span> </span><span>0</span><span> </span><span>1</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

你可以使用 np.diag() 来创建一个沿对角线有指定数值的矩阵,而在矩阵的其他部分为 0

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>diag</span><span>([</span><span>10</span><span>,</span><span> </span><span>20</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>40</span><span>,</span><span> </span><span>50</span><span>])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[[</span><span>10</span><span></span><span>0</span><span></span><span>0</span><span></span><span>0</span><span></span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span> </span><span>0</span><span> </span><span>20</span><span></span><span>0</span><span></span><span>0</span><span></span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span> </span><span>0</span><span></span><span>0</span><span> </span><span>30</span><span></span><span>0</span><span></span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span> </span><span>0</span><span></span><span>0</span><span></span><span>0</span><span> </span><span>40</span><span></span><span>0</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span> </span><span>0</span><span></span><span>0</span><span></span><span>0</span><span></span><span>0</span><span> </span><span>50</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

你可以使用 np.range() 来创建一个具有特定数值范围的 ndarray。它是通过指定一个整数的开始和结束(不包括)范围以及一个步长来创建的:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>arange</span><span>(</span><span>1</span><span>,</span><span> </span><span>20</span><span>,</span><span> </span><span>3</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span> </span><span>1</span><span></span><span>4</span><span></span><span>7</span><span> </span><span>10</span><span> </span><span>13</span><span> </span><span>16</span><span> </span><span>19</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

读取 ndarray

ndarray 的值可以使用索引、分片或布尔索引来读取。

使用索引读取 ndarray 的值

在索引中,你可以使用 ndarray 的元素的整数索引来读取数值,就像你读取 Python 列表一样。就像 Python 列表一样,索引从 0 开始。

例如,在定义如下的 ndarray 中:

<ol><li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>arange</span><span>(</span><span>1</span><span>,</span><span> </span><span>20</span><span>,</span><span> </span><span>3</span><span>)</span></code></li></ol>
Salin selepas log masuk

第四个值将是 my_ndarray[3],即 10。最后一个值是 my_ndarray[-1],即 19

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>arange</span><span>(</span><span>1</span><span>,</span><span> </span><span>20</span><span>,</span><span> </span><span>3</span><span>)</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>0</span><span>])</span></code></li>
<li><code><span>1</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>3</span><span>])</span></code></li>
<li><code><span>10</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[-</span><span>1</span><span>])</span></code></li>
<li><code><span>19</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>5</span><span>])</span></code></li>
<li><code><span>16</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>6</span><span>])</span></code></li>
<li><code><span>19</span></code></li>
</ol>
Salin selepas log masuk

使用分片读取 ndarray

你也可以使用分片来读取 ndarray 的块。分片的工作方式是用冒号(:)操作符指定一个开始索引和一个结束索引。然后,Python 将获取该开始和结束索引之间的 ndarray 片断:

<ol>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[:])</span></code></li>
<li><code><span>[</span><span> </span><span>1</span><span></span><span>4</span><span></span><span>7</span><span> </span><span>10</span><span> </span><span>13</span><span> </span><span>16</span><span> </span><span>19</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>2</span><span>:</span><span>4</span><span>])</span></code></li>
<li><code><span>[</span><span> </span><span>7</span><span> </span><span>10</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>5</span><span>:</span><span>6</span><span>])</span></code></li>
<li><code><span>[</span><span>16</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[</span><span>6</span><span>:</span><span>7</span><span>])</span></code></li>
<li><code><span>[</span><span>19</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[:-</span><span>1</span><span>])</span></code></li>
<li><code><span>[</span><span> </span><span>1</span><span></span><span>4</span><span></span><span>7</span><span> </span><span>10</span><span> </span><span>13</span><span> </span><span>16</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>[-</span><span>1</span><span>:])</span></code></li>
<li><code><span>[</span><span>19</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

分片创建了一个 ndarray 的引用(或视图)。这意味着,修改分片中的值也会改变原始 ndarray 的值。

比如说:

<ol>
<li><code><span>>>></span><span> my_ndarray</span><span>[-</span><span>1</span><span>:]</span><span> </span><span>=</span><span> </span><span>100</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span></span><span>1</span><span> </span><span>4</span><span> </span><span>7</span><span></span><span>10</span><span></span><span>13</span><span></span><span>16</span><span> </span><span>100</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

对于秩超过 1 的 ndarray 的分片,可以使用 [行开始索引:行结束索引, 列开始索引:列结束索引] 语法:

<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([(</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>),</span><span> </span><span>(</span><span>4</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>6</span><span>)])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[[</span><span>1</span><span> </span><span>2</span><span> </span><span>3</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>4</span><span> </span><span>5</span><span> </span><span>6</span><span>]]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>[</span><span>0</span><span>:</span><span>2</span><span>,</span><span>1</span><span>:</span><span>3</span><span>])</span></code></li>
<li><code><span>[[</span><span>2</span><span> </span><span>3</span><span>]</span></code></li>
<li><code><span> </span><span>[</span><span>5</span><span> </span><span>6</span><span>]]</span></code></li>
</ol>
Salin selepas log masuk

使用布尔索引读取 ndarray 的方法

读取 ndarray 的另一种方法是使用布尔索引。在这种方法中,你在方括号内指定一个过滤条件,然后返回符合该条件的 ndarray 的一个部分。

例如,为了获得一个 ndarray 中所有大于 5 的值,你可以指定布尔索引操作 my_ndarray[my_ndarray > 5]。这个操作将返回一个包含所有大于 5 的值的 ndarray:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>6</span><span>,</span><span> </span><span>7</span><span>,</span><span> </span><span>8</span><span>,</span><span> </span><span>9</span><span>,</span><span> </span><span>10</span><span>])</span></code></li>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> my_ndarray</span><span>[</span><span>my_ndarray </span><span>></span><span> </span><span>5</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[</span><span> </span><span>6</span><span></span><span>7</span><span></span><span>8</span><span></span><span>9</span><span> </span><span>10</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

例如,为了获得一个 ndarray 中的所有偶数值,你可以使用如下的布尔索引操作:

<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> my_ndarray</span><span>[</span><span>my_ndarray </span><span>%</span><span> </span><span>2</span><span> </span><span>==</span><span> </span><span>0</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[</span><span> </span><span>2</span><span></span><span>4</span><span></span><span>6</span><span></span><span>8</span><span> </span><span>10</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

而要得到所有的奇数值,你可以用这个方法:

<ol>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> my_ndarray</span><span>[</span><span>my_ndarray </span><span>%</span><span> </span><span>2</span><span> </span><span>==</span><span> </span><span>1</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2</span><span>)</span></code></li>
<li><code><span>[</span><span>1</span><span> </span><span>3</span><span> </span><span>5</span><span> </span><span>7</span><span> </span><span>9</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

ndarray 的矢量和标量算术

NumPy 的 ndarray 允许进行矢量和标量算术操作。在矢量算术中,在两个 ndarray 之间进行一个元素的算术操作。在标量算术中,算术运算是在一个 ndarray 和一个常数标量值之间进行的。

如下的两个 ndarray:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>])</span></code></li>
<li><code><span>>>></span><span> my_ndarray2 </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>6</span><span>,</span><span> </span><span>7</span><span>,</span><span> </span><span>8</span><span>,</span><span> </span><span>9</span><span>,</span><span> </span><span>10</span><span>])</span></code></li>
</ol>
Salin selepas log masuk

如果你将上述两个 ndarray 相加,就会产生一个两个 ndarray 的元素相加的新的 ndarray。例如,产生的 ndarray 的第一个元素将是原始 ndarray 的第一个元素相加的结果,以此类推:

<ol>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2 </span><span>+</span><span> my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span> </span><span>7</span><span></span><span>9</span><span> </span><span>11</span><span> </span><span>13</span><span> </span><span>15</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

这里,7 是 1 和 6 的和,这是我相加的 ndarray 中的前两个元素。同样,15 是 5 和10 之和,是最后一个元素。

请看以下算术运算:

<ol>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2 </span><span>-</span><span> my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span>5</span><span> </span><span>5</span><span> </span><span>5</span><span> </span><span>5</span><span> </span><span>5</span><span>]</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2 </span><span>*</span><span> my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span> </span><span>6</span><span> </span><span>14</span><span> </span><span>24</span><span> </span><span>36</span><span> </span><span>50</span><span>]</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray2 </span><span>/</span><span> my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span>6.</span><span> </span><span>3.5</span><span></span><span>2.66666667</span><span> </span><span>2.25</span><span> </span><span>2.</span><span></span><span>]</span></code></li>
</ol>
Salin selepas log masuk

在 ndarray 中加一个标量值也有类似的效果,标量值被添加到 ndarray 的所有元素中。这被称为“广播broadcasting”:

<ol>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray </span><span>+</span><span> </span><span>10</span><span>)</span></code></li>
<li><code><span>[</span><span>11</span><span> </span><span>12</span><span> </span><span>13</span><span> </span><span>14</span><span> </span><span>15</span><span>]</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray </span><span>-</span><span> </span><span>10</span><span>)</span></code></li>
<li><code><span>[-</span><span>9</span><span> </span><span>-</span><span>8</span><span> </span><span>-</span><span>7</span><span> </span><span>-</span><span>6</span><span> </span><span>-</span><span>5</span><span>]</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray </span><span>*</span><span> </span><span>10</span><span>)</span></code></li>
<li><code><span>[</span><span>10</span><span> </span><span>20</span><span> </span><span>30</span><span> </span><span>40</span><span> </span><span>50</span><span>]</span></code></li>
<li><code><span>>>></span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray </span><span>/</span><span> </span><span>10</span><span>)</span></code></li>
<li><code><span>[</span><span>0.1</span><span> </span><span>0.2</span><span> </span><span>0.3</span><span> </span><span>0.4</span><span> </span><span>0.5</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

ndarray 的排序

有两种方法可以对 ndarray 进行原地或非原地排序。原地排序会对原始 ndarray 进行排序和修改,而非原地排序会返回排序后的 ndarray,但不会修改原始 ndarray。我将尝试这两个例子:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>3</span><span>,</span><span> </span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>4</span><span>])</span></code></li>
<li><code><span>>>></span><span> my_ndarray</span><span>.</span><span>sort</span><span>()</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span>1</span><span> </span><span>2</span><span> </span><span>3</span><span> </span><span>4</span><span> </span><span>5</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

正如你所看到的,sort() 方法对 ndarray 进行原地排序,并修改了原数组。

还有一个方法叫 np.sort(),它对数组进行非原地排序:

<ol>
<li><code><span>>>></span><span> my_ndarray </span><span>=</span><span> np</span><span>.</span><span>array</span><span>([</span><span>3</span><span>,</span><span> </span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>4</span><span>])</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>np</span><span>.</span><span>sort</span><span>(</span><span>my_ndarray</span><span>))</span></code></li>
<li><code><span>[</span><span>1</span><span> </span><span>2</span><span> </span><span>3</span><span> </span><span>4</span><span> </span><span>5</span><span>]</span></code></li>
<li><code><span>>>></span><span> </span><span>print</span><span>(</span><span>my_ndarray</span><span>)</span></code></li>
<li><code><span>[</span><span>3</span><span> </span><span>1</span><span> </span><span>2</span><span> </span><span>5</span><span> </span><span>4</span><span>]</span></code></li>
</ol>
Salin selepas log masuk

正如你所看到的,np.sort() 方法返回一个已排序的 ndarray,但没有修改它。

总结

我已经介绍了很多关于 NumPy 和 ndarray 的内容。我谈到了创建 ndarray,读取它们的不同方法,基本的向量和标量算术,以及排序。NumPy 还有很多东西可以探索,包括像 union() 和 intersection()这样的集合操作,像 min() 和 max() 这样的统计操作,等等。

我希望我上面演示的例子是有用的。祝你在探索 NumPy 时愉快。 

 

Atas ialah kandungan terperinci Memanipulasi nombor dalam Python dengan NumPy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!