NumPy配列について② 2つの1次元配列から2次元配列を作る

2つの1次元配列から2次元配列を作る方法について。
(もちろんすべて初めに import numpy as npでnumpyをインポート)

(1)2つの(1次元)リストから作る場合

①2つの(1次元)リスト
list1 = [1,2,3,4]
list2 = [5,6,7,8]

②2つの(1次元)リストから多重リストを作る
list3 = [list1, list2]
(間違って list1 + list2とすると[1, 2, 3, 4, 5, 6, 7, 8]という1次元配列になっていまう)

③リストの配列を渡してnumpyのarrayを作成する
array_from_list = np.array(list3)

④出力すると
print(array_from_list)

結果:
[[1 2 3 4]
 [5 6 7 8]]


(2)2つの1次元Numpyのarrayから作る場合

① 2つの1次元array
array1 = np.array([1,2,3,4])
array2 = np.array([5,6,7,8])

②stackを使って新しい次元のarrayを作成する
array_from_array = np.stack((array1, array2))

③出力すると
print(array_from_array)

結果:
[[1 2 3 4]
 [5 6 7 8]]


※初心者から見た注意点。stackのあとのカッコを2重にするを忘れない。




NumPy配列について① 基本的な復習

① Numpyの配列はリストと見た目は似ているが別もの。

(以下は初めにimport numpy as npとしているものとする)

例として、
リストを
list_a = [0, 1, 2, 3]

Numpyの1次元の配列を
array_a = np.array([0, 1, 2, 3])

とすると

list_a は [0, 1, 2, 3]、
array_a は array([0, 1, 2, 3])。

データ型を確認すると
type(list_a) では class 'list' となり、
type(array_a) では class 'numpy.ndarray' となる。

ちなみにprint関数で出力すると、

print(list_a) は [0, 1, 2, 3] となるのに対し、
print(array_a) は  [0 1 2 3] となる(カンマがない)。


② まずリストを作ってそれを入れることでarrayを作ることができる。

list_b = [2, 4, 6, 8]

array_b = np.array(list_b)
とすることで、
array_b は array([2, 4, 6, 8])となる。


③ Numpyに入れることができるのは数値だけ

 array_c =np.array([1, letter, 3]) のように文字列を入れるとエラーになる。

スコープについて②

グローバル変数を関数のなかで操作する場合はグローバル宣言をする。

a = 10
b = 20

def sum(x, y):

    global a
    a = 3
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 3
sum: 30
a: 3
…グローバル宣言によりaは3で表示され、関数使用後も3で表示される。しかし関数での計算ではaの10が引数のxに引き渡されているのでsumは30のまま。

スコープについて①

独学プログラマーP.60~ スコープについて。


ここについては、
グローバル変数とローカル変数を理解しよう! Python入門
が分かりやすかった。


関数の外で変数を決めるとグローバル変数となる。これはどこからでもアクセスできる。
関数の中で変数を決めるとローカル変数となる。この変数はその関数内だけで使える。


①グローバル変数は関数のなかでも使用できる。

a = 10
b = 20

def sum(x, y):

    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 10
sum: 30
a: 10
…aは10のままで出力され、関数使用後も当然10のまま。


②次に関数のなかでa = 3としてみると、

a = 10
b = 20

def sum(x, y):

    a = 3
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 3
sum: 30
a: 10
…関数のなかでだけaは3で、関数使用後は10のままとなる。つまり関数のなかでaという同じ名前のローカル変数を作ったことになる。


③関数のなかでaに1を加えようとしてみると、

a = 10
b = 20

def sum(x, y):

    a += 1
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:エラーになる。
UnboundLocalError: local variable 'a' referenced before assignment
グローバル変数は関数内で参照はできるが操作はできないということ


④また、関数内でのみ使った変数を関数外で使用してみると、

a = 10
b = 20

def sum(x, y):

    c = 100
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

print("c", c)

結果:エラーになる。
NameError: name 'c' is not defined
ローカル変数は関数内でのみアクセスできる。

スコープ:scope
(行動・思考・知覚・調査などの)範囲、領域
<コンピュータ用語>宣言の場所により決定される変数やプロシージャの有効範囲。

いちばんやさしいPythonの教本を買った

先日(といっても2ヵ月前)いちばんやさしいPythonの教本を買った…

前半は(独学プログラマーとPython1年生で勉強した)基礎を復習、途中からは会話botをつくりながら関数、モジュール、ライブラリのインポート、requestsでHTML情報取得、簡単なWebアプリケーションの作成など。

(主線から離れたことかもしれないけど)勉強になったのは例外処理、仮想環境の構築。例外処理は地味だけど重要、仮想環境の構築はいろいろなライブラリをインストールして収拾がつかなくなるのを防ぐことができる。


いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで [ 鈴木たかのり ]
(なぜか画像つきのリンク表示がうまくいかなかったのでテキストだけです)

python print

print_pythonnote print ¶ 言葉や数値を出力する ¶ In [ ]: print ( "...