目次
はじめに
0 Numpy の基本
1 ndarray のプロパティ
1.1 ndarray の出力共通プロパティ
2 ndarray のデータ型
3 ndarray の形状とデータ型を変更する
3.1 ndarray の形状を表示および変更する
3.2 ndarray の形状 データ型
4 ndarray 配列の作成
多くの行列言語とは異なり、積演算子
7 ndarray数组的堆叠、拆分
ホームページ バックエンド開発 Python チュートリアル Python Numpyにおけるndarrayの一般的な操作例の分析

Python Numpyにおけるndarrayの一般的な操作例の分析

May 10, 2023 pm 04:25 PM
python numpy ndarray

はじめに

NumPy (数値 Python) は、Python 用のオープンソース数値計算拡張機能です。このツールは、大規模な行列の保存と処理に使用できます。Python 独自の入れ子になったリスト構造 (行列の表現にも使用できます) よりもはるかに効率的で、多数の次元配列および行列の演算をサポートしています。配列演算用の数学関数ライブラリも多数提供しています。
Numpy は主に ndarray を使用して N 次元配列を処理します。Numpy のほとんどのプロパティとメソッドは ndarray に対応するため、Numpy での ndarray の一般的な操作を習得することが非常に必要です。

0 Numpy の基本

NumPy の主なオブジェクトは、同型多次元配列です。これは要素 (通常は数値) のリストであり、すべて同じ型で、非負の整数のタプルによってインデックスが付けられます。 NumPy 次元の軸と呼ばれます。
以下に示す例では、配列には 2 つの軸があります。最初の軸の長さは 2 で、2 番目の軸の長さは 3 です。

[[ 1., 0., 0.],
 [ 0., 1., 2.]]
ログイン後にコピー

1 ndarray のプロパティ

1.1 ndarray の出力共通プロパティ

  • ndarray.ndim: の軸 (次元)配列) の番号。 Python の世界では、次元の数をランクと呼びます。

  • ndarray.shape: 配列の次元。これは、各次元の配列のサイズを表す整数のタプルです。 n 行 m 列の行列の場合、形状は (n,m) になります。したがって、形状タプルの長さは、次元 ndim のランクまたは数になります。

  • ndarray.size: 配列要素の合計数。これは、形状要素の積に等しい。

  • ndarray.dtype: 配列内の要素のタイプを記述するオブジェクト。 dtype は、標準の Python タイプを使用して作成または指定できます。さらに、NumPy は独自の型を提供します。たとえば、numpy.int32、numpy.int16、numpy.float64 などです。

  • ndarray.itemsize : 配列内の各要素のバイト サイズ。たとえば、float64 型の要素を含む配列の項目サイズは 8 (=64/8) ですが、complex32 型の配列の項目サイズは 4 (=32/8) です。 ndarray.dtype.itemsize と同じです。

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type &#39;numpy.ndarray&#39;>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type &#39;numpy.ndarray&#39;>
ログイン後にコピー

2 ndarray のデータ型

同じ ndarray には、同じ型のデータが格納されます。ndarray の一般的なデータ型は次のとおりです。

Python Numpyにおけるndarrayの一般的な操作例の分析

3 ndarray の形状とデータ型を変更する

3.1 ndarray の形状を表示および変更する

## ndarray reshape操作
array_a = np.array([[1, 2, 3], [4, 5, 6]])
print(array_a, array_a.shape)
array_a_1 = array_a.reshape((3, 2))
print(array_a_1, array_a_1.shape)
# note: reshape不能改变ndarray中元素的个数,例如reshape之前为(2,3),reshape之后为(3,2)/(1,6)...
## ndarray转置
array_a_2 = array_a.T
print(array_a_2, array_a_2.shape)
## ndarray ravel操作:将ndarray展平
a.ravel()  # returns the array, flattened
array([ 1,  2,  3,  4,  5,  6 ])

输出:
[[1 2 3]
 [4 5 6]] (2, 3)
[[1 2]
 [3 4]
 [5 6]] (3, 2)
[[1 4]
 [2 5]
 [3 6]] (3, 2)
ログイン後にコピー

3.2 ndarray の形状 データ型

astype(dtype[, order, Casting, subok, copy]): ndarray のデータ型を変更します。変更する必要があるデータ型を渡します。他のキーワード パラメーターは無視できます。

array_a = np.array([[1, 2, 3], [4, 5, 6]])
print(array_a, array_a.dtype)
array_a_1 = array_a.astype(np.int64)
print(array_a_1, array_a_1.dtype)
输出:
[[1 2 3]
 [4 5 6]] int32
[[1 2 3]
 [4 5 6]] int64
ログイン後にコピー

4 ndarray 配列の作成

NumPy は主に np.array() 関数を通じて ndarray 配列を作成します。

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype(&#39;int64&#39;)
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype(&#39;float64&#39;)
ログイン後にコピー

作成時に配列の型を明示的に指定することもできます。

>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])
ログイン後にコピー

np.random.random# を使用して作成することもできます。 ## 関数 ランダムな ndarray 配列。

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021,  0.34556073,  0.39676747],
       [ 0.53881673,  0.41919451,  0.6852195 ]])
ログイン後にコピー

通常、配列の要素は最初は不明ですが、そのサイズはわかっています。したがって、NumPy は、初期プレースホルダーの内容を含む配列

を作成するための関数をいくつか提供します。これにより、コストのかかる操作であるアレイの拡張の必要性が軽減されます。 Functionzeros
は 0 で構成される配列を作成し、関数 ones は完全な配列を作成し、関数 empty は初期内容がランダムである配列を作成します。記憶の状態。 デフォルトでは、作成される配列の dtype は float64 です。

>>> np.zeros( (3,4) )
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )                # dtype can also be specified
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]]], dtype=int16)
>>> np.empty( (2,3) )                                 # uninitialized, output may vary
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])
ログイン後にコピー
数値の配列を作成するために、NumPy は、リストの代わりに配列を返す

range

に似た関数を提供します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&gt;&gt;&gt; np.arange( 10, 30, 5 ) array([10, 15, 20, 25]) &gt;&gt;&gt; np.arange( 0, 2, 0.3 ) # it accepts float arguments array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])</pre><div class="contentsignin">ログイン後にコピー</div></div>5 ndarray 配列の一般的な操作

多くの行列言語とは異なり、積演算子

*

は NumPy 配列で要素ごとに操作します。行列積は、@ 演算子 (Python> = 3.5 の場合) または dot 関数またはメソッドを使用して実行できます: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&gt;&gt;&gt; A = np.array( [[1,1], ... [0,1]] ) &gt;&gt;&gt; B = np.array( [[2,0], ... [3,4]] ) &gt;&gt;&gt; A * B # elementwise product array([[2, 0], [0, 4]]) &gt;&gt;&gt; A @ B # matrix product array([[5, 4], [3, 4]]) &gt;&gt;&gt; A.dot(B) # another matrix product array([[5, 4], [3, 4]])</pre><div class="contentsignin">ログイン後にコピー</div></div> 特定の演算 (例:

=

および *=) は、新しい行列配列を作成せずに、操作対象の行列配列をより直接的に変更します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&gt;&gt;&gt; a = np.ones((2,3), dtype=int) &gt;&gt;&gt; b = np.random.random((2,3)) &gt;&gt;&gt; a *= 3 &gt;&gt;&gt; a array([[3, 3, 3], [3, 3, 3]]) &gt;&gt;&gt; b += a &gt;&gt;&gt; b array([[ 3.417022 , 3.72032449, 3.00011437], [ 3.30233257, 3.14675589, 3.09233859]]) &gt;&gt;&gt; a += b # b is not automatically converted to integer type Traceback (most recent call last): ... TypeError: Cannot cast ufunc add output from dtype(&amp;#39;float64&amp;#39;) to dtype(&amp;#39;int64&amp;#39;) with casting rule &amp;#39;same_kind&amp;#39;</pre><div class="contentsignin">ログイン後にコピー</div></div>異なる型の配列を操作する場合、結果の配列の型は、より一般的または正確な配列に対応します (アップキャストと呼ばれる動作)。

>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
&#39;float64&#39;
>>> c = a+b
>>> c
array([ 1.        ,  2.57079633,  4.14159265])
>>> c.dtype.name
&#39;float64&#39;
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
       -0.54030231-0.84147098j])
>>> d.dtype.name
&#39;complex128&#39;
ログイン後にコピー

配列内のすべての要素の合計の計算など、多くの単項演算は、

ndarray

クラスのメソッドとして実装されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&gt;&gt;&gt; a = np.random.random((2,3)) &gt;&gt;&gt; a array([[ 0.18626021, 0.34556073, 0.39676747], [ 0.53881673, 0.41919451, 0.6852195 ]]) >>> a.sum() 2.5718191614547998 >>> a.min() 0.1862602113776709 >>> a.max() 0.6852195003967595</pre><div class="contentsignin">ログイン後にコピー</div></div>

デフォルトでは、これらの操作は配列の形状に関係なく、あたかも数値のリストであるかのように配列に対して機能します。ただし、axis パラメーターを指定すると、配列の指定した軸に沿って演算を適用できます。

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)                            # 计算每一列的和
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)                            # 计算每一行的和
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)                         # cumulative sum along each row
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])
解释:以第一行为例,0=0,1=1+0,3=2+1+0,6=3+2+1+0
ログイン後にコピー
6 ndarray 配列のインデックス付け、スライス、反復

Oneディメンション

配列は、リストや他の Python シーケンス タイプと同様に、インデックス付け、スライス、反復が可能です。

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000    # 等价于 a[0:6:2] = -1000; 从0到6的位置, 每隔一个设置为-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,  fan 216,   343,   512,   729])
>>> a[ : :-1]                                 # 将a反转
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
ログイン後にコピー

多次元

配列は、軸ごとに 1 つのインデックスを持つことができます。これらのインデックスは、カンマ区切りのタプルとして指定されます:

>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1]                       # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1]                        # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ]                      # each column in the second and third row of b
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])
>>> b[-1]                                  # the last row. Equivalent to b[-1,:]
array([40, 41, 42, 43])
ログイン後にコピー

7 ndarray数组的堆叠、拆分

几个数组可以沿不同的轴堆叠在一起,例如:np.vstack()函数和np.hstack()函数

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8.,  8.],
       [ 0.,  0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1.,  8.],
       [ 0.,  4.]])
>>> np.vstack((a,b))
array([[ 8.,  8.],
       [ 0.,  0.],
       [ 1.,  8.],
       [ 0.,  4.]])
>>> np.hstack((a,b))
array([[ 8.,  8.,  1.,  8.],
       [ 0.,  0.,  0.,  4.]])
ログイン後にコピー

column_stack()函数将1D数组作为列堆叠到2D数组中。

>>> from numpy import newaxis
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b))     # returns a 2D array
array([[ 4., 3.],
       [ 2., 8.]])
>>> np.hstack((a,b))           # the result is different
array([ 4., 2., 3., 8.])
>>> a[:,newaxis]               # this allows to have a 2D columns vector
array([[ 4.],
       [ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  3.],
       [ 2.,  8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))   # the result is the same
array([[ 4.,  3.],
       [ 2.,  8.]])
ログイン後にコピー

使用hsplit(),可以沿数组的水平轴拆分数组,方法是指定要返回的形状相等的数组的数量,或者指定应该在其之后进行分割的列:
同理,使用vsplit(),可以沿数组的垂直轴拆分数组,方法同上。

################### np.hsplit ###################
>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[ 9.,  5.,  6.,  3.,  6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
       [ 1.,  4.,  9.,  2.,  2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])
>>> np.hsplit(a,3)   # Split a into 3
[array([[ 9.,  5.,  6.,  3.],
       [ 1.,  4.,  9.,  2.]]), array([[ 6.,  8.,  0.,  7.],
       [ 2.,  1.,  0.,  6.]]), array([[ 9.,  7.,  2.,  7.],
       [ 2.,  2.,  4.,  0.]])]
>>> np.hsplit(a,(3,4))   # Split a after the third and the fourth column
[array([[ 9.,  5.,  6.],
       [ 1.,  4.,  9.]]), array([[ 3.],
       [ 2.]]), array([[ 6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
       [ 2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])]
>>> x = np.arange(8.0).reshape(2, 2, 2)
>>> x
array([[[0.,  1.],
        [2.,  3.]],
       [[4.,  5.],
        [6.,  7.]]])
################### np.vsplit ###################
>>> np.vsplit(x, 2)
[array([[[0., 1.],
        [2., 3.]]]), array([[[4., 5.],
        [6., 7.]]])]
ログイン後にコピー

以上がPython Numpyにおけるndarrayの一般的な操作例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

独特の目標は関連していますか? 独特の目標は関連していますか? Apr 03, 2025 pm 10:30 PM

明確で明確なものは区別に関連していますが、それらは異なる方法で使用されます。明確な(形容詞)は、物事自体の独自性を説明し、物事の違いを強調するために使用されます。明確な(動詞)は、区別の動作または能力を表し、差別プロセスを説明するために使用されます。プログラミングでは、個別は、重複排除操作などのコレクション内の要素の独自性を表すためによく使用されます。明確なは、奇数や偶数の偶数を区別するなど、アルゴリズムまたは関数の設計に反映されます。最適化する場合、異なる操作は適切なアルゴリズムとデータ構造を選択する必要がありますが、異なる操作は、論理効率の区別を最適化し、明確で読み取り可能なコードの書き込みに注意を払う必要があります。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

Cで理解する方法!x? Cで理解する方法!x? Apr 03, 2025 pm 02:33 PM

!X理解!Xは、C言語の論理的な非操作者です。 Xの値をブーリングします。つまり、虚偽の真の変化、trueへの誤った変更です。ただし、Cの真実と虚偽はブール型ではなく数値で表されていることに注意してください。非ゼロは真であると見なされ、0のみが偽と見なされます。したがって、!xは正の数と同じ負の数を扱い、真実と見なされます。

H5ページの生産には継続的なメンテナンスが必要ですか? H5ページの生産には継続的なメンテナンスが必要ですか? Apr 05, 2025 pm 11:27 PM

H5ページは、コードの脆弱性、ブラウザー互換性、パフォーマンスの最適化、セキュリティの更新、ユーザーエクスペリエンスの改善などの要因のため、継続的に維持する必要があります。効果的なメンテナンス方法には、完全なテストシステムの確立、バージョン制御ツールの使用、定期的にページのパフォーマンスの監視、ユーザーフィードバックの収集、メンテナンス計画の策定が含まれます。

c言語でsumとはどういう意味ですか? c言語でsumとはどういう意味ですか? Apr 03, 2025 pm 02:36 PM

Cには組み込みの合計関数はありませんが、次のように実装できます。ループを使用して要素を1つずつ蓄積します。ポインターを使用して、要素に1つずつアクセスして蓄積します。大量のデータ量については、並列計算を検討してください。

ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます Apr 04, 2025 am 06:48 AM

コードのコピーと貼り付けは不可能ではありませんが、注意して扱う必要があります。コード内の環境、ライブラリ、バージョンなどの依存関係は、現在のプロジェクトと一致しないため、エラーや予測不可能な結果が得られます。ファイルパス、従属ライブラリ、Pythonバージョンなど、コンテキストが一貫していることを確認してください。さらに、特定のライブラリのコードをコピーして貼り付けるときは、ライブラリとその依存関係をインストールする必要がある場合があります。一般的なエラーには、パスエラー、バージョンの競合、一貫性のないコードスタイルが含まれます。パフォーマンスの最適化は、コードの元の目的と制約に従って再設計またはリファクタリングする必要があります。コピーされたコードを理解してデバッグすることが重要であり、盲目的にコピーして貼り付けないでください。

C言語の合計の意味は何ですか? C言語の合計の意味は何ですか? Apr 03, 2025 pm 02:09 PM

c言語で配列要素を合計する方法:ループを使用して、配列要素を1つずつ蓄積します。多次元アレイの場合、ネストされたループを使用してトラバースして蓄積します。アレイインデックスを注意深く確認して、プログラムのクラッシュを引き起こす外れのアクセスを避けてください。

See all articles