開始行:
** numpy [#pbad2eee]
[[→ndarray:rest-term>http://rest-term.com/archives/2999/]]
** ベクトライズによる高速化 [#vdd41bc9]
http://postd.cc/python_meets_julia_micro_performance/
いったん配列を取得してから、それをループ処理し、要素1ずつ...
vhex = np.vectorize(hex)
vint = np.vectorize(int)
def parse_int_numpy():
n = np.random.randint(0,2**32-1,1000)
s = vhex(n)
m = vint(s,16)
np.all(m == n)
return s
** (重要) 配列操作の注意! [#w3deae23]
a = [0,1,2,3,4,5]
In[8]: a
Out[8]: [0, 1, 2, 3, 4]
In[9]: a[0:3]
Out[9]: [0, 1, 2]
window = 100
start = 0
end = 99
のとき
b = x[start : end+1]
もしくは
b = x[start : start+window]
In[10]: window=100
In[11]: start=0
In[12]: end = 99
In[13]: x = range(200)
In[14]: b = x[start:end+1]
In[15]: len(b)
Out[15]: 100
In[16]: b = x[start:start+window]
In[17]: len(b)
Out[17]: 100
** インストール [#ue151d9b]
アップデートの際にはまったので備忘録を残します。numpyをア...
pip install numpy -U
アンインストール後、再度インストールしようとしてもエラー。
pip install numpy
そこで, [[こちらから>http://www.lfd.uci.edu/~gohlke/pytho...
pip install 'numpy-1.9.3*****.whl'
.whlからインストールすると一発で上手くいった。良かった。...
** ログの保存 [#l110da97]
def debuglog(name='', data=[]):
with open('log.csv', 'a') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow(name)
writer.writerow(data)
** ログの保存2 [#y65afdea]
from datetime import date
import csv
def debuglog(s=None, data=None):
d = date.today().isoformat()
with open('log.csv', 'a') as f:
writer = csv.writer(f, lineterminator='\n')
if not s is None:
writer.writerow([d , s])
if not data is None:
writer.writerow([d, data])
print s, data
** バイナリデータの読み書き [#gd88ed0e]
http://hydrocul.github.io/wiki/numpy/ndarray-io.html
*** np.save, np.load [#f95901d9]
ndarr1 = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0....
np.save('test.npy', ndarr1)
ndarr2 = np.load('test.npy')
*** np.savez, np.load [#j534b0de]
np.savez を使うと複数のndarrayを名前付きで、しかも圧縮し...
ndarr1 = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0....
ndarr2 = np.array([10, 20, 30])
np.savez('test.npz', x=ndarr1, y=ndarr2)
ndarr3 = np.load('test.npz')
print(ndarr3['x'])
# 出力結果
# [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
print(ndarr3['y'])
# 出力結果
# [10 20 30]
*** np.savetxt, np.loadtxt [#v90400eb]
2次元ndarryをテキスト形式で保存・読み込み. 区切り文字は空...
ndarr1 = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., ...
np.savetxt('test.csv', ndarr1, delimiter=',')
ndarr2 = np.loadtxt('test.csv', delimiter=',')
print(ndarr2)
# 出力結果
# [[ 1. 2. 3.]
# [ 4. 5. 6.]
# [ 7. 8. 9.]]
** 初めての信号処理 [#a94b925d]
人工信号に対して、FFT、STFT解析を行うサンプルコード
[[→初めての信号処理>https://gist.github.com/peace098beat/...
** オーディオのロード [#sac51b33]
+ scipyを使う場合
返り値のdataはnumpy.array()
# オーディオのロード
from scipy.io.wavfile import read
fs, data = read(filename)
data = data[0:fs/2-1]
** Numpy Array (np.ndarray) [#wdb3c394]
ary = np.array([1,2,3,4,5]) = np.array( (1,2,3,4,5))
# ゼロベクトル
ary = np.zeros(3) # 1次元の場合はスカラーでよい
ary = np.zeros((3, 2)) # N次元の場合はタプルを忘れずに
# 空配列
ary = np.empty((Nx,Ny))
ary = np.empty_like(ary0)
# 1ベクトル
ary = np.ones((Nx,Ny))
ary = np.ones_like(ary0)
# 単位行列
ary = identity(N) #NxNの単位行列が生成される
- ndarrayの属性・プロパティ
ary = np.array([1,2,3])
# データタイプ(np.bool, np.int, np.float, np.complex... ...
ary.dtype
# タイプの変更
ary = ary.astype(np.float)
# 配列サイズ
ary = np.empty((3,5,2), dtype = np.float)
ary.shape
>> (3,5,2)
# 配列次元
ary = np.empty((3,5,2), dtype = np.float)
ary.ndim
>> 3
# 要素数
ary = np.empty((3,5,2), dtype = np.float)
ary.size
>> 30
** Numpy Array (ndarray) 便利機能 [#q7969d99]
[[→The N-dimensional array>http://docs.scipy.org/doc/nump...
#ref(s-ndarray.jpg)
[[→ndarray atribute and method>https://gist.github.com/pe...
** Numpy dtype [#g7d9e97b]
dtype_range = {np.bool_: (False, True),
np.bool8: (False, True),
np.uint8: (0, 255),
np.uint16: (0, 65535),
np.int8: (-128, 127),
np.int16: (-32768, 32767),
np.int64: (-2**63, 2**63 - 1),
np.uint64: (0, 2**64 - 1),
np.int32: (-2**31, 2**31 - 1),
np.uint32: (0, 2**32 - 1),
np.float32: (-1, 1),
np.float64: (-1, 1)}
** オーディオI/O [#ra14cb50]
pythonでオーディオを再生するにはpyaudioがよさそう。pyaudi...
[[→numpy.unpackbit>http://docs.scipy.org/doc/numpy/refere...
>>> a = np.array([[2], [7], [23]], dtype=np.uint8)
>>> a
array([[ 2],
[ 7],
[23]], dtype=uint8)
>>> b = np.unpackbits(a, axis=1)
>>> b
array([[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)
** np.frombufferで24bitファイルを読み込む [#u09b00d3]
[[→Speed up loading 24-bit binary data into 16-bit numpy ...
output = np.frombuffer(data,'b').reshape(-1,3)[:,1:].fla...
** sndhdr — サウンドファイルの識別 [#y37af40a]
path = './audio/sin_44100_24bit_stereo_5s.wav'
print sndhdr.what(path)
>>> ('wav', 44100, 2, -1, 24)
print sndhdr.whathdr(path)
>>>('wav', 44100, 2, -1, 24)
import sndhdr, wave, struct
if sndhdr.what(fname)[0] != 'wav'
raise StandardError("file doesn't have wav header")
try:
wav = wave.open(fname)
params = (nchannels,sampwidth,rate,nframes,comp,compnam...
frames = wav.readframes(nframes*nchannels)
finally:
wav.close()
out = struct.unpack_from ("%dh" % nframes*nchannels, fra...
** 配列の拡張(行列の各列ベクトルを標準化) [#t268cbfc]
** 配列の拡張(行列の各列ベクトルを標準化) [#n529e4d8]
X = np.arange(12).reshape((3,4))
>> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
// 平均ベクトル
m = np.mean(X, axis=0)
>> array([ 4., 5., 6., 7.])
// X-m そのまま各行ごとに演算できる
>> array([
[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
//標準偏差
s = np.std(X, axis=0)
>> array([
[-0.3381028 , -1.20939778, 0.5124003 , 1.3573876...
[-2.12531859, 0.60120223, 1.75273089, 0.4617148...
[-0.14482128, -0.73401208, 0.63781457, -0.3383537...
// 標準化
// (X-m)/s
>> array([
[-1.22474487, -1.22474487, -1.22474487, -1.2247448...
[ 0. , 0. , 0. , 0. ...
[ 1.22474487, 1.22474487, 1.22474487, 1.2247448...
なんて便利なんだ。
** ** 配列の拡張(行列の各行ベクトルを標準化) [#y6f5308c]
** ** 配列の拡張(行列の各行ベクトルを標準化) [#z84ef687]
ポイントはm = np.mean(X, axis=1)[:, np.newaxis]
np.newaxisは軸を追加する。これによりnumpyが自動で軸ごとに...
X=np.arange(12).reshape(3,4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
m = np.mean(X, axis=1)
[ 1.5 5.5 9.5]
m.T[:,np.newaxis]
[[ 1.5]
[ 5.5]
[ 9.5]]
X-m
[[-1.5 -0.5 0.5 1.5]
[-1.5 -0.5 0.5 1.5]
[-1.5 -0.5 0.5 1.5]]
** # numpy配列をプリントした場合の表示桁数 [#r9594de7]
np.set_printoptions(precision=3)
def ndprint(a, format_string='{0:.2f}'):
"""
ndarrayをprintする関数
:example: ndprint(x)
"""
return [format_string.format(v, i) for i, v in enumer...
def ndprints(s, a, format_string='{0:.2f}'):
"""
ndarrayをprintする関数
:example: ndprint(x)
"""
print s, [format_string.format(v, i) for i, v in enum...
** 配列の結合 [#h5fb7178]
>>> a = np.arange(9).reshape((3,3))
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b = np.arange(8,-1,-1).reshape((3,3))
>>> b
array([[8, 7, 6],
[5, 4, 3],
[2, 1, 0]])
## numpy.dstack() で二次元配列を結合して三次元配列にする
>>> np.dstack((a,b))
array([[[0, 8],
[1, 7],
[2, 6]],
[[3, 5],
[4, 4],
[5, 3]],
[[6, 2],
[7, 1],
[8, 0]]])
## numpy.hstack() で列方向に結合
>>> np.hstack((a,b))
array([[0, 1, 2, 8, 7, 6],
[3, 4, 5, 5, 4, 3],
[6, 7, 8, 2, 1, 0]])
## numpy.vstack() で行方向に結合
>>> np.vstack((a,b))
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[8, 7, 6],
[5, 4, 3],
[2, 1, 0]])
## numpy.dsplit() で三次元配列を分割
>>> a = np.arange(16).reshape(2,2,4)
>>> a
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>> np.dsplit(a,2)
[array([[[ 0, 1],
[ 4, 5]],
[[ 8, 9],
[12, 13]]]), array([[[ 2, 3],
[ 6, 7]],
[[10, 11],
[14, 15]]])]
## numpy.hsplit() で列方向に分割
>>> a = np.arange(16).reshape(4,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> np.hsplit(a,2)
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
## numpy.vsplit() で行方向に分割
>>> np.vsplit(a,2)
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
## numpy.transpose() で配列を転置
>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
[3, 4]])
>>> np.transpose(a)
array([[1, 3],
[2, 4]])
## ndarray.T でも良い
>>> a.T
array([[1, 3],
[2, 4]])
## numpy.swapaxes() で軸の交換
>>> a = np.array([[1,2,3]])
>>> np.swapaxes(a, 0, 1)
array([[1],
[2],
[3]])
終了行:
** numpy [#pbad2eee]
[[→ndarray:rest-term>http://rest-term.com/archives/2999/]]
** ベクトライズによる高速化 [#vdd41bc9]
http://postd.cc/python_meets_julia_micro_performance/
いったん配列を取得してから、それをループ処理し、要素1ずつ...
vhex = np.vectorize(hex)
vint = np.vectorize(int)
def parse_int_numpy():
n = np.random.randint(0,2**32-1,1000)
s = vhex(n)
m = vint(s,16)
np.all(m == n)
return s
** (重要) 配列操作の注意! [#w3deae23]
a = [0,1,2,3,4,5]
In[8]: a
Out[8]: [0, 1, 2, 3, 4]
In[9]: a[0:3]
Out[9]: [0, 1, 2]
window = 100
start = 0
end = 99
のとき
b = x[start : end+1]
もしくは
b = x[start : start+window]
In[10]: window=100
In[11]: start=0
In[12]: end = 99
In[13]: x = range(200)
In[14]: b = x[start:end+1]
In[15]: len(b)
Out[15]: 100
In[16]: b = x[start:start+window]
In[17]: len(b)
Out[17]: 100
** インストール [#ue151d9b]
アップデートの際にはまったので備忘録を残します。numpyをア...
pip install numpy -U
アンインストール後、再度インストールしようとしてもエラー。
pip install numpy
そこで, [[こちらから>http://www.lfd.uci.edu/~gohlke/pytho...
pip install 'numpy-1.9.3*****.whl'
.whlからインストールすると一発で上手くいった。良かった。...
** ログの保存 [#l110da97]
def debuglog(name='', data=[]):
with open('log.csv', 'a') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow(name)
writer.writerow(data)
** ログの保存2 [#y65afdea]
from datetime import date
import csv
def debuglog(s=None, data=None):
d = date.today().isoformat()
with open('log.csv', 'a') as f:
writer = csv.writer(f, lineterminator='\n')
if not s is None:
writer.writerow([d , s])
if not data is None:
writer.writerow([d, data])
print s, data
** バイナリデータの読み書き [#gd88ed0e]
http://hydrocul.github.io/wiki/numpy/ndarray-io.html
*** np.save, np.load [#f95901d9]
ndarr1 = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0....
np.save('test.npy', ndarr1)
ndarr2 = np.load('test.npy')
*** np.savez, np.load [#j534b0de]
np.savez を使うと複数のndarrayを名前付きで、しかも圧縮し...
ndarr1 = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0....
ndarr2 = np.array([10, 20, 30])
np.savez('test.npz', x=ndarr1, y=ndarr2)
ndarr3 = np.load('test.npz')
print(ndarr3['x'])
# 出力結果
# [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
print(ndarr3['y'])
# 出力結果
# [10 20 30]
*** np.savetxt, np.loadtxt [#v90400eb]
2次元ndarryをテキスト形式で保存・読み込み. 区切り文字は空...
ndarr1 = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., ...
np.savetxt('test.csv', ndarr1, delimiter=',')
ndarr2 = np.loadtxt('test.csv', delimiter=',')
print(ndarr2)
# 出力結果
# [[ 1. 2. 3.]
# [ 4. 5. 6.]
# [ 7. 8. 9.]]
** 初めての信号処理 [#a94b925d]
人工信号に対して、FFT、STFT解析を行うサンプルコード
[[→初めての信号処理>https://gist.github.com/peace098beat/...
** オーディオのロード [#sac51b33]
+ scipyを使う場合
返り値のdataはnumpy.array()
# オーディオのロード
from scipy.io.wavfile import read
fs, data = read(filename)
data = data[0:fs/2-1]
** Numpy Array (np.ndarray) [#wdb3c394]
ary = np.array([1,2,3,4,5]) = np.array( (1,2,3,4,5))
# ゼロベクトル
ary = np.zeros(3) # 1次元の場合はスカラーでよい
ary = np.zeros((3, 2)) # N次元の場合はタプルを忘れずに
# 空配列
ary = np.empty((Nx,Ny))
ary = np.empty_like(ary0)
# 1ベクトル
ary = np.ones((Nx,Ny))
ary = np.ones_like(ary0)
# 単位行列
ary = identity(N) #NxNの単位行列が生成される
- ndarrayの属性・プロパティ
ary = np.array([1,2,3])
# データタイプ(np.bool, np.int, np.float, np.complex... ...
ary.dtype
# タイプの変更
ary = ary.astype(np.float)
# 配列サイズ
ary = np.empty((3,5,2), dtype = np.float)
ary.shape
>> (3,5,2)
# 配列次元
ary = np.empty((3,5,2), dtype = np.float)
ary.ndim
>> 3
# 要素数
ary = np.empty((3,5,2), dtype = np.float)
ary.size
>> 30
** Numpy Array (ndarray) 便利機能 [#q7969d99]
[[→The N-dimensional array>http://docs.scipy.org/doc/nump...
#ref(s-ndarray.jpg)
[[→ndarray atribute and method>https://gist.github.com/pe...
** Numpy dtype [#g7d9e97b]
dtype_range = {np.bool_: (False, True),
np.bool8: (False, True),
np.uint8: (0, 255),
np.uint16: (0, 65535),
np.int8: (-128, 127),
np.int16: (-32768, 32767),
np.int64: (-2**63, 2**63 - 1),
np.uint64: (0, 2**64 - 1),
np.int32: (-2**31, 2**31 - 1),
np.uint32: (0, 2**32 - 1),
np.float32: (-1, 1),
np.float64: (-1, 1)}
** オーディオI/O [#ra14cb50]
pythonでオーディオを再生するにはpyaudioがよさそう。pyaudi...
[[→numpy.unpackbit>http://docs.scipy.org/doc/numpy/refere...
>>> a = np.array([[2], [7], [23]], dtype=np.uint8)
>>> a
array([[ 2],
[ 7],
[23]], dtype=uint8)
>>> b = np.unpackbits(a, axis=1)
>>> b
array([[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)
** np.frombufferで24bitファイルを読み込む [#u09b00d3]
[[→Speed up loading 24-bit binary data into 16-bit numpy ...
output = np.frombuffer(data,'b').reshape(-1,3)[:,1:].fla...
** sndhdr — サウンドファイルの識別 [#y37af40a]
path = './audio/sin_44100_24bit_stereo_5s.wav'
print sndhdr.what(path)
>>> ('wav', 44100, 2, -1, 24)
print sndhdr.whathdr(path)
>>>('wav', 44100, 2, -1, 24)
import sndhdr, wave, struct
if sndhdr.what(fname)[0] != 'wav'
raise StandardError("file doesn't have wav header")
try:
wav = wave.open(fname)
params = (nchannels,sampwidth,rate,nframes,comp,compnam...
frames = wav.readframes(nframes*nchannels)
finally:
wav.close()
out = struct.unpack_from ("%dh" % nframes*nchannels, fra...
** 配列の拡張(行列の各列ベクトルを標準化) [#t268cbfc]
** 配列の拡張(行列の各列ベクトルを標準化) [#n529e4d8]
X = np.arange(12).reshape((3,4))
>> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
// 平均ベクトル
m = np.mean(X, axis=0)
>> array([ 4., 5., 6., 7.])
// X-m そのまま各行ごとに演算できる
>> array([
[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
//標準偏差
s = np.std(X, axis=0)
>> array([
[-0.3381028 , -1.20939778, 0.5124003 , 1.3573876...
[-2.12531859, 0.60120223, 1.75273089, 0.4617148...
[-0.14482128, -0.73401208, 0.63781457, -0.3383537...
// 標準化
// (X-m)/s
>> array([
[-1.22474487, -1.22474487, -1.22474487, -1.2247448...
[ 0. , 0. , 0. , 0. ...
[ 1.22474487, 1.22474487, 1.22474487, 1.2247448...
なんて便利なんだ。
** ** 配列の拡張(行列の各行ベクトルを標準化) [#y6f5308c]
** ** 配列の拡張(行列の各行ベクトルを標準化) [#z84ef687]
ポイントはm = np.mean(X, axis=1)[:, np.newaxis]
np.newaxisは軸を追加する。これによりnumpyが自動で軸ごとに...
X=np.arange(12).reshape(3,4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
m = np.mean(X, axis=1)
[ 1.5 5.5 9.5]
m.T[:,np.newaxis]
[[ 1.5]
[ 5.5]
[ 9.5]]
X-m
[[-1.5 -0.5 0.5 1.5]
[-1.5 -0.5 0.5 1.5]
[-1.5 -0.5 0.5 1.5]]
** # numpy配列をプリントした場合の表示桁数 [#r9594de7]
np.set_printoptions(precision=3)
def ndprint(a, format_string='{0:.2f}'):
"""
ndarrayをprintする関数
:example: ndprint(x)
"""
return [format_string.format(v, i) for i, v in enumer...
def ndprints(s, a, format_string='{0:.2f}'):
"""
ndarrayをprintする関数
:example: ndprint(x)
"""
print s, [format_string.format(v, i) for i, v in enum...
** 配列の結合 [#h5fb7178]
>>> a = np.arange(9).reshape((3,3))
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b = np.arange(8,-1,-1).reshape((3,3))
>>> b
array([[8, 7, 6],
[5, 4, 3],
[2, 1, 0]])
## numpy.dstack() で二次元配列を結合して三次元配列にする
>>> np.dstack((a,b))
array([[[0, 8],
[1, 7],
[2, 6]],
[[3, 5],
[4, 4],
[5, 3]],
[[6, 2],
[7, 1],
[8, 0]]])
## numpy.hstack() で列方向に結合
>>> np.hstack((a,b))
array([[0, 1, 2, 8, 7, 6],
[3, 4, 5, 5, 4, 3],
[6, 7, 8, 2, 1, 0]])
## numpy.vstack() で行方向に結合
>>> np.vstack((a,b))
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[8, 7, 6],
[5, 4, 3],
[2, 1, 0]])
## numpy.dsplit() で三次元配列を分割
>>> a = np.arange(16).reshape(2,2,4)
>>> a
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>> np.dsplit(a,2)
[array([[[ 0, 1],
[ 4, 5]],
[[ 8, 9],
[12, 13]]]), array([[[ 2, 3],
[ 6, 7]],
[[10, 11],
[14, 15]]])]
## numpy.hsplit() で列方向に分割
>>> a = np.arange(16).reshape(4,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> np.hsplit(a,2)
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
## numpy.vsplit() で行方向に分割
>>> np.vsplit(a,2)
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
## numpy.transpose() で配列を転置
>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
[3, 4]])
>>> np.transpose(a)
array([[1, 3],
[2, 4]])
## ndarray.T でも良い
>>> a.T
array([[1, 3],
[2, 4]])
## numpy.swapaxes() で軸の交換
>>> a = np.array([[1,2,3]])
>>> np.swapaxes(a, 0, 1)
array([[1],
[2],
[3]])
ページ名: