numpyの学習
タグ(スペースで区切っ):numpyのパイソン
データの種類
5種類:ブール型(BOOL)、整数(INT)、符号なし整数(UINT)、浮動小数点(フロート)、錯体(複合体)
密接にオリジナルのCタイプに関連するプリミティブ型をサポート:
numpyのタイプ | タイプC | 説明 |
---|---|---|
np.bool | BOOL | ブール値は、バイトとして格納されている(TrueまたはFalse) |
np.byte | signed char型 | プラットフォームの定義 |
np.ubyte | unsigned char型 | プラットフォームの定義 |
np.short | ショート | プラットフォームの定義 |
np.ushort | 符号なしshort | プラットフォームの定義 |
np.intc | int型 | プラットフォームの定義 |
np.uintc | unsigned int型 | プラットフォームの定義 |
np.int_ | 長いです | プラットフォームの定義 |
np.uint | unsigned long型 | プラットフォームの定義 |
np.longlong | 長い長いです | プラットフォームの定義 |
np.ulonglong | 符号なしの長い長いです | プラットフォームの定義 |
np.half / np.float16 | - | 半精度浮動小数点数:符号ビット、指数5、10仮数 |
np.single | 浮く | 定義された単精度浮動プラットホーム:典型的には、符号ビットは、8つの指数、仮数23 |
np.double | ダブル | プラットフォーム定義の倍精度浮動小数点:通常符号ビット、11指数、仮数52。 |
np.longdouble | 長い二 | |
np.csingle | フロートコンプレックス | 複雑な、2つの単精度浮動小数点(実部と虚部)で表されます |
np.cdouble | 倍精度複素数 | 複合二倍精度の浮動小数点(実部と虚部)で表されます。 |
np.clongdouble | 複雑な長い二 | 複雑な、2つの拡張倍精度浮動小数点(実部と虚部)で表されます。 |
その多くのので、したがってエイリアスの固定サイズのセットを提供し、定義したプラットフォームに依存しています。
注:タイプ・コードは、典型的には、ビットC32のcomplex256として最初の数字、文字/ 8であります
|タイプC | | numpyのタイプタイプコード|説明|
|:----------- |:------:||:--- |
| np.int8 | int8_t | I1は、|(-128〜127)バイト|
| np.int16 | int16_t | I2 |整数(-32768〜32767)|
| np.int32 | int32_t | I4 |整数(2147483647に-2147483648)|
| np.int64 | int64_tの| I8 |整数(9223372036854775807に-9223372036854775808)|
| np.uint8 | uint8_t | U1 |符号なし整数(0〜255)|
| np.uint16 | uint16_t | U2 |符号なし整数(0〜65535)|
| NP .uint32 |のuint32_t | U4 |符号なし整数(0〜4294967295)|
| || np.uint64 uint64_tを| U8 |(0 18446744073709551615まで)符号なし整数||
インデックスのための整数| | np.intp | intptr_t |なし、インデックスssize_tのとほぼ同じ|
| np.uintp |いるuintptr_t |ない|ポインタを収容するのに十分に大きな整数|
| np.float32 |フロート| FまたはF4 | 8ビットの指数|
| np.float64 / np.float_ |ダブル| F8 |この内蔵のpythonフロートの精度と一致していることに注意してください。|
| np.complex64 |複合、2つの32ビット浮動小数点で表現される(実数及び虚数成分)| | C8 |複合フロート
| np.complex128 / np.complex_ |二重コンプレックス| C16 |なお、内蔵複合パイソン試合の精度。|
作成し、narray操作
import numpy as np
#新版本
x1 = np.int8([0,1,2,3,4,5,6,7,8,9])
x2 = np.arange(10, dtype=np.int8)
x1, x2
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int8),
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int8))
#老版本
y1 = np.array(np.arange(9), dtype=np.int8)
y2 = np.array(np.arange(9), dtype='i1')
y1, y2
"""
新手最容易犯的一个错误就是把数组内容直接当做参数传给array,如np.array(1,2,3)
"""
'\n\xe6\x96\xb0\xe6\x89\x8b\xe6\x9c\x80\xe5\xae\xb9\xe6\x98\x93\xe7\x8a\xaf\xe7\x9a\x84\xe4\xb8\x80\xe4\xb8\xaa\xe9\x94\x99\xe8\xaf\xaf\xe5\xb0\xb1\xe6\x98\xaf\xe6\x8a\x8a\xe6\x95\xb0\xe7\xbb\x84\xe5\x86\x85\xe5\xae\xb9\xe7\x9b\xb4\xe6\x8e\xa5\xe5\xbd\x93\xe5\x81\x9a\xe5\x8f\x82\xe6\x95\xb0\xe4\xbc\xa0\xe7\xbb\x99array\xef\xbc\x8c\xe5\xa6\x82np.array(1,2,3)\n'
#要转换数组的类型,请使用 .astype() 方法(首选)或类型本身作为函数
x1.astype('u1'), x2.astype(int),np.int16(y1), np.uint16(y2)
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8),
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int16),
array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=uint16))
#dtype属性,代表数组的类型;shape属性,代表数组的形状;ndim属性,代表数组有几个维度
#size属性:代表数组中元素的个数, itemsize属性:代表数组中单个元素以字节计的大小
#data属性:数组中实际的数据
z = np.arange(15).reshape((3,5))
z.shape, z.dtype, z.ndim, z.size, z.itemsize, z.data, np.issubdtype(z.dtype, np.integer), np.issubdtype(z.dtype, np.floating)
((3L, 5L),
dtype('int32'),
2,
15,
4,
<read-write buffer for 0x0000000007485580, size 60, offset 0 at 0x000000000745BC38>,
True,
False)
オーバーフローエラー
ときに、データの値が、使用可能なメモリのタイプよりも多くのメモリを必要とする* 8 100 * 10の正確な計算のために、例えば、numpy.power 64ビット整数が、1874919424(間違った)整数32ビットのために与えられています。
np.power(100, 8, dtype=np.int64), np.power(100, 8, dtype=np.int32)
(10000000000000000, 1874919424)
# NumPy分别提供numpy.iinfo 并numpy.finfo 验证NumPy整数和浮点值的最小值或最大值:
np.iinfo(np.int), np.iinfo(np.int32), np.iinfo(np.int64)
(iinfo(min=-2147483648, max=2147483647, dtype=int32),
iinfo(min=-2147483648, max=2147483647, dtype=int32),
iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64))
従来の機構の5種類の配列を作成します。
1、从其他Python结构(例如,列表,元组)转换
2、numpy原生数组的创建(例如,arange、ones、zeros等)
3、从磁盘读取数组,无论是标准格式还是自定义格式
4、通过使用字符串或缓冲区从原始字节创建数组
5、使用特殊库函数(例如,random)
ゼロ埋め方法
注:[、]などのオプションのパラメータである:空の(形状〔、DTYPE、オーダー])、形状パラメータは必須、DTYPEであり、順序は任意のパラメータであります
方法 | 説明 |
---|---|
空の(形状〔、DTYPE、注文]) | 初期エントリせずに、所定の形状および型の新しい配列を返します。 |
empty_like(プロトタイプ[、dtypeは、順序、subok、...]) | 所定の形状の種類を返し、同じアレイの新しい配列。 |
眼(N [、M、K、DTYPE、注文]) | これは、二次元アレイ、対角線、残りのゼロを返します。 |
アイデンティティ(N [、DTYPE]) | アイデンティティの配列を返します。 |
もの(形状〔、DTYPE、注文]) | 所定の形状および型の新しい配列を返し、そして1を満たしました。 |
([、DTYPE、順序、subok、形状])ones_like | 同じアレイに対して、アレイの所与の形状の種類を返します。 |
ゼロ(形状〔、DTYPE、注文]) | 所定の形状及びタイプの新しい配列を返し、ゼロで満たされます。 |
zeros_like([、DTYPE、順序、subok、形状]) | ゼロの同じアレイのアレイの所定の形状の型を返します。 |
完全な(形状、fill_value [DTYPE、注文]) | 所定の形状および型の新しい配列を返し、そしてfill_valueでいっぱい。 |
full_like(、fill_value [、dtypeは、順序、...]) | リターンの形状や種類が同じ配列の完全な配列を与えられました。 |
既存のデータから作成
方法 | 説明 |
---|---|
アレイ(オブジェクト[、DTYPE、コピー、順序、試験、ndmin]) | 配列を作成します。 |
asarray([、DTYPE、注文]) | 配列に入力します。 |
asanyarray([、DTYPE、注文]) | 入力変換ndarrayが、ndarrayサブクラスによって。 |
ascontiguousarray([、DTYPE]) | 連続したメモリアレイ(ndim> = 1)(C配列)を返します。 |
asmatrix(データ[、DTYPE]) | 入力行列として解釈されます。 |
コピー([順序]) | 指定されたオブジェクトのコピーの配列を返します。 |
frombuffer(緩衝液[、DTYPE、カウント、オフセット]) | バッファが一次元配列として解釈されます。 |
FROMFILE(ファイル[、DTYPE、数、9月、オフセット]) | テキストファイルやバイナリ配列のデータ構造。 |
fromfunction(機能、形状、** kwargsから) | アレイは、各座標上の機能を実行することによって構成されています。 |
fromiter(反復可能な、DTYPE [カウント]) | |
fromstring(文字列[、DTYPE、数、9月]) | 新しい一次元配列のテキストデータから初期化文字列。 |
loadtxt(FNAME [、DTYPE、コメント、区切り文字、...]) | テキストファイルからデータをロードします。 |
注:?ビュー機能はnp.arrayによって説明することができます
#zero和ones代码实现
"""
zero:创建所有元素为0的数组
ones:创建所有元素为1的数组
empty:创建所有元素为随机的数组 *****
"""
np.empty([2, 2], dtype=int), np.empty((3, 3)),np.empty_like(([1,2,3], [4,5,6])),np.eye(4)
(array([[43998544, 0],
[62099504, 0]]), array([[0.22222222, 0.44444444, 0.66666667],
[0.88888889, 1.11111111, 1.33333333],
[1.55555556, 1.77777778, 2. ]]), array([[ 0, 1073741824, 0],
[1074790400, 0, 1075314688]]), array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]]))
#因为浮点数的有限精度问题,array返回的数组可能无法预知,因此出现浮点数时,最好用linspace
np.arange(10,100,10),np.linspace(0,2,10)
(array([10, 20, 30, 40, 50, 60, 70, 80, 90]),
array([0. , 0.22222222, 0.44444444, 0.66666667, 0.88888889,
1.11111111, 1.33333333, 1.55555556, 1.77777778, 2. ]))
プリントアレー
打印出来非常类似嵌套列表
如果数组太长,则会自动忽略部数据,只打印首位
print np.arange(24).reshape(2,3,4),np.arange(1000000)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]] [ 0 1 2 ... 999997 999998 999999]
基本操作
算術演算は、アレイ上の素子のレベル(要素ごと実行)が行われます。
注:線形代数、行列乗算乗算*表されるが、乗算の要素のレベルを表す、numpyのnp.dot(B)との行列乗算、またはa.dot(B)
bはフロートである+ = bがintで、エラーは、B + = Bより洗練されたため、エラー率、報告されているが、与えられないとき
a = np.array([1,2,3,4])
b = np.arange(4)
a-b, a+b, a*b, a*2, a/3,a.dot(b) #全部新增的一个数组
(array([1, 1, 1, 1]),
array([1, 3, 5, 7]),
array([ 0, 2, 6, 12]),
array([2, 4, 6, 8]),
array([0, 0, 1, 1]),
20)
ndarray内置函数:sum,min,max,comsum,并且可以通过制定axis=0或1来指定对行或者列操作
通用函数
一元ufunc
函数 | 说明 |
---|---|
abs、fabs | 计算整数、浮点数或复数的绝对值。对于非复数,fabs更快 |
sqrt | 计算各元素的平方根 |
square | 计算各元素的平方 |
exp | 计算各元素的指数$e^X$ |
log、log10、log2、log1P | 分别对自然对数($e^X$),底数分别为e、10、2、1+x |
sign | 计算各元素的正负号:1(正数)、-1(负数) |
floor | 计算各元素小于等于该值的最大整数 |
ceil | 计算各元素大于等于该值的最小整数 |
rint | 将各元素四舍五入到最接近的整数,保留dtype |
modf | 将数组的小数与整数部分分别以两个独立的数组形式返回 |
isnan | 返回哪些值是nan的布尔型数组 |
isfinite、isinf | 返回哪些数组是有穷或无穷的布尔型数组 |
cos、cosh、sin、sinh、tan、tanh | 普通和双曲三角函数 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanh | 反三角函数 |
logical_not | 计算各元素not x的真值。相当于-arr |
二元ufunc
函数 | 说明 |
---|---|
add | 将数组中对应的元素相加 |
subtract | 从第一个数组中减去第二个数组中的元素 |
multiply | 数组元素相乘 |
divide、floor_divide | 除法或除不要余数 |
power | 第一个元素A,根据第二个相应的元素计算$A^B$ |
maximum、fmax、minimum、fmin | 元素最大值和最小值计算。fmax和fmin将忽略NaN |
mod | 除法求余数 |
copysign | 将第二个数组中的符号复制给第一个数组中的值 |
greater、greater_equal、less、less_equal、equal、not_equal | 比较运算,产生布尔型数组。依次> >= < <= == != |
logical_and、logical_or、logical_xor | 真值逻辑运算。与或非 |
索引、切片以及遍历
一维数组非常类似与python的list和tuple,它们可以被index、slice、iterate
copy方法可以复制数组和标量值
c = np.arange(10)
c,c[0],c[1:3],c[:5],c[5:],c[:-1],c[:]
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
0,
array([1, 2]),
array([0, 1, 2, 3, 4]),
array([5, 6, 7, 8, 9]),
array([0, 1, 2, 3, 4, 5, 6, 7, 8]),
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
跟列表最重要的区别在于,数组的切片的数据不会复制,任何修改都会反馈到元数据上
c1 = c[4:6]
c1[:] = 111
c
array([ 0, 1, 2, 3, 111, 111, 6, 7, 8, 9])
#二维数组的索引和切片
d = np.arange(16).reshape((4,4))
d[1][0],d[0,1]
(4, 1)
#布尔型索引
#布尔型索引在多维数组里面经常会跟上面的数字索引方法混用
e = np.array(['a','b','c','e','f','g','h','i','j','k'])
e == 'e',c[e == 'f'],c[e != 'e'],c[(e == 'f')|(e != 'f')]
(array([False, False, False, True, False, False, False, False, False,
False]),
array([111]),
array([ 0, 1, 2, 111, 111, 6, 7, 8, 9]),
array([ 0, 1, 2, 3, 111, 111, 6, 7, 8, 9]))
元素的形状
可以通过reshape(创建新数组)、resize(改变原数组)、ravel(使数组变扁平)
将不同的数组堆叠(stacking)起来
多个数组可以沿着不同的额轴堆叠起来,用vstack(竖向)、hstack(横向)
将一个数组切分成多个
使用hsplit或vsplit将一个数组沿制定方向切分split(array,(x,y))切分为x列和y列,split(array,n)切分为n个数组
拷贝与视图
1、简单的赋值不发生拷贝;函数调用也不会产生拷贝
2、不同数据对象可以共享相同的数据,view方法新建一个数组,但是仍使用相同的数据
3、深拷贝:copy
广播
在NumPy中如果遇到大小不一致的数组运算,就会触发广播机制。满足一定的条件才能触发广播,不然也会报错。
形状相同
形状相同的数组之间的运算就是在对应位做运算。
形状不同
当数组大小不一致时,就会触发广播机制。广播机制的规则:
1.让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐;
2.输出数组的shape是输入数组shape的各个轴上的最大值;
3.如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错;
4.当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。