当前位置:首页 > Python教程 > python技巧

python-learning-第二季-数据处理numpy

https://www.bjsxt.com/down/8468.html

numpy-科学计算基础库

 

技术分享图片

例子:

import numpy as np
#创建数组
a = np.arange(10)
print(a)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0123456789]
<classnumpy.ndarray>

Process finished with exit code 0

 

对列表中的元素开平方

之前的方法为:

            import math
b = [3,4,9]
#定义存储开平方结果的列表
result = []
for i in b:
    result.append(math.sqrt(i))
print(result)

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[1.7320508075688772, 2.0, 3.0]

Process finished with exit code 0

现在使用numpy速度更快,更方便。对ndarray对象类型进行向量处理:

import numpy as np
b = np.array([3,4,9])
print(np.sqrt(b))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[1.732050812.         3.        ]

Process finished with exit code 0

 

array进行创建数组

技术分享图片

一维数组:

import numpy as np
a = np.array([3,4,9])
print(a)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[349]
<classnumpy.ndarray>

Process finished with exit code 0

a.shape 为(3,)

 

二维数组:

import numpy as np
a = np.array([[1,2,3], [2,3,4], [3,4,5]])
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[123]
 [234]
 [345]]
(3, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

三维数组:

import numpy as np
a = np.array([[[1,2,3], [2,3,4], [3,4,5]]])
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[[123]
  [234]
  [345]]]
(1, 3, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

array函数中dtype参数的使用,设置数组元素类型:

 

import numpy as np
a = np.array([3,4,9], dtype=float)
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[3. 4. 9.]
(3,)
<classnumpy.ndarray>

Process finished with exit code 0

 

array函数中ndmin参数的使用,说明最小维度为几,传入的值如果维度不够,就会在前面加维度1:

import numpy as np
a = np.array([3,4,9], dtype=float, ndmin=3)
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[[3. 4. 9.]]]
(1, 1, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

arange函数:

技术分享图片

import numpy as np
a = np.arange(0, 6, dtype=float)
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0. 1. 2. 3. 4. 5.]
(6,)
<classnumpy.ndarray>

Process finished with exit code 0

 

随机创建数组 

技术分享图片

import numpy as np
a = np.random.random(10) #创建size=10的10个随机数[0.0, 1.0)
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0.702246790.123333660.76152280.484887290.550499690.881890770.884483420.63407020.558463580.03856909]
(10,)
<classnumpy.ndarray>

Process finished with exit code 0

 

创建二维的:

import numpy as np
a = np.random.random(size=(3,4)) #3行4列
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[0.754527620.065117610.288767950.33917503]
 [0.700558530.058995910.69513740.48631801]
 [0.797255140.526458490.609551850.94158767]]
(3, 4)
<classnumpy.ndarray>

Process finished with exit code 0

 

三维的:

import numpy as np
a = np.random.random(size=(3,4,2)) #3行4列
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[[0.094590110.06400518]
  [0.639320670.90659996]
  [0.250105030.00512396]
  [0.935335790.15083294]]

 [[0.686090450.53156758]
  [0.717630290.43475711]
  [0.384470340.23069394]
  [0.488141150.65881832]]

 [[0.914885050.58573524]
  [0.731302860.89564597]
  [0.316572410.63555136]
  [0.608981150.71098613]]]
(3, 4, 2)
<classnumpy.ndarray>

Process finished with exit code 0

 

随机整数: 

技术分享图片

dtype参数默认为np.int, 也可以设置为np.int64

import numpy as np
a = np.random.randint(1, 10, 5)
print(a)
print(a.shape)
print(a.dtype)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[41338]
(5,)
int64
<classnumpy.ndarray>

Process finished with exit code 0

发现实际默认的跟讲的相反

 

import numpy as np
a = np.random.randint(1, 10, (3,3))
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[453]
 [168]
 [276]]
(3, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

import numpy as np
a = np.random.randint(1, 10, (4,4))
print(a)
print(a.shape)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[5531]
 [3816]
 [7722]
 [6469]]
(4, 4)
<classnumpy.ndarray>

Process finished with exit code 0

 

标准正态分布 

技术分享图片

一维:

import numpy as np
a = np.random.randn(4)
print(a)
print(a.shape)
print(a.dtype)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[-0.07124224 -0.23748904 -0.667593420.78374469]
(4,)
float64
<classnumpy.ndarray>

Process finished with exit code 0

 

二维:

import numpy as np
a = np.random.randn(2,3)
print(a)
print(a.shape)
print(a.dtype)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[-1.01226872 -1.32755441 -2.26288293]
 [ 0.941234711.046929860.85342488]]
(2, 3)
float64
<classnumpy.ndarray>

Process finished with exit code 0

 

三维:

import numpy as np
a = np.random.randn(2,3,2)
print(a)
print(a.shape)
print(a.dtype)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[[-0.10896308 -0.5064629 ]
  [-0.399167530.35598577]
  [-0.41677605 -0.41341541]]

 [[-1.129731980.26209766]
  [ 0.24671435 -0.2798904 ]
  [ 0.823667670.76207401]]]
(2, 3, 2)
float64
<classnumpy.ndarray>

Process finished with exit code 0

 

指定期望和方差的正太分布 

默认期望为0.0,方差为1.0

技术分享图片

 

 

import numpy as np
a = np.random.normal(loc=3, scale=4, size=(2,3))
print(a)
print(a.shape)
print(a.dtype)
print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[-1.676151311.557906541.159349  ]
 [-0.842052853.530456531.2121123 ]]
(2, 3)
float64
<classnumpy.ndarray>

Process finished with exit code 0

 

ndarray对象的属性

技术分享图片 

技术分享图片

import numpy as np
a = np.random.normal(loc=3, scale=4, size=(2,3))
print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 5.34933995 -1.681678264.93713342]
 [ 4.687251645.717888035.41723111]]
26
float64
8
(2, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

其他方式创建数组 

技术分享图片

import numpy as np
a = np.zeros((5,))
#等价于a = np.zeros(5)
print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0. 0. 0. 0. 0.]
15
float64
8
(5,)
<classnumpy.ndarray>

Process finished with exit code 0

 

技术分享图片

import numpy as np
a = np.ones((2,3))

print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[1. 1. 1.]
 [1. 1. 1.]]
26
float64
8
(2, 3)
<classnumpy.ndarray>

Process finished with exit code 0

  

技术分享图片

 

 

import numpy as np
a = np.empty((2,3))

print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[-3.10503618e+231 -2.32036278e+0771.48219694e-323]
 [ 0.00000000e+0000.00000000e+0004.17201348e-309]]
26
float64
8
(2, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

技术分享图片

import numpy as np
a = np.linspace(1, 10)

print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[ 1.          1.183673471.367346941.551020411.734693881.918367352.102040822.285714292.469387762.653061222.836734693.020408163.204081633.38775513.571428573.755102043.938775514.122448984.306122454.489795924.673469394.857142865.040816335.22448985.408163275.591836735.77551025.959183676.142857146.326530616.510204086.693877556.877551027.061224497.244897967.428571437.61224497.795918377.979591848.163265318.346938788.530612248.714285718.897959189.081632659.265306129.448979599.632653069.8163265310.        ]
150
float64
8
(50,)
<classnumpy.ndarray>

Process finished with exit code 0

  

技术分享图片

上面注释写错了,是底数为10,但是倍数就不一定了,比如下面的例子的意思就是在值范围[10,10^10]中间取20个数,使他们之间的倍数是相同的:

import numpy as np
a = np.logspace(1, 10, 20, dtype=int)

print(a)
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[         1029882637842335695120691615841832985455591623776483293014384498428133231274274983792690191128837891335981828610000000000]
120
int64
8
(20,)
<classnumpy.ndarray>

Process finished with exit code 0

 

一维数组的切片索引: 

技术分享图片

import numpy as np
a = np.arange(10)
print(a)
print(a[0])
print(a[-1])
print(a[:])
print(a[2:6:2])

print(a[::-1])
print(a[-3:-1:1])
print(a[-1:-3:-1])
print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0123456789]
09
[0123456789]
[24]
[9876543210]
[78]
[98]
110
int64
8
(10,)
<classnumpy.ndarray>

Process finished with exit code 0

 

二维的切片和索引

[行的切片,列的切片 ] = [start:stop:step,start:stop:step]

 

import numpy as np
a = np.arange(1, 13)
a = a.reshape(4,3)

print(a)
#等价于
print(a[:,:])
print()

print(a[0])
print(a[1][2])
print(a[:][2])
#得到第二行,等价于
print(a[2])
#也等价于下面的写法
print(a[2][:])
print()

#想要得到第二列为:
print(a[:,2])

#得到二三行的一二列
print(a[2:4,1:3])

print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
[[ 123]
 [ 456]
 [ 789]
 [101112]]

[123]
6
[789]
[789]
[789]

[ 36912]
[[ 89]
 [1112]]
212
int64
8
(4, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

使用坐标获取:

import numpy as np
a = np.arange(1, 13)
a = a.reshape(4,3)

print(a)
#第三行第二列
print(a[2,1])
#等价于
print(a[2][1])
print()

#同时获得第三行第二列,第四行第一列
print(np.array((a[2,1],a[3,0])))
#等价于
print(a[(2,3),(1,0)])
print()

print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
88

[ 810]
[ 810]

212
int64
8
(4, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

索引为负数:

import numpy as np
a = np.arange(1, 13)
a = a.reshape(4,3)

print(a)
#获取最后一行
print(a[-1])
#行进行倒序
print(a[::-1, :])
#行列都倒序
print(a[::-1, ::-1])
print()

print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
[101112]
[[101112]
 [ 789]
 [ 456]
 [ 123]]
[[121110]
 [ 987]
 [ 654]
 [ 321]]

212
int64
8
(4, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

数组的复制

技术分享图片

浅拷贝:

import numpy as np
a = np.arange(1, 13).reshape(4,3)

print(a)
print(id(a))
#获取一二行一二列
sub_a = a[:2,:2]
print(sub_a)
print(id(sub_a))

#修改切片的值
sub_a[0][0] = 100
print(a)
print(sub_a)#结果可见会影响原来数组,浅拷贝

print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
4495540752
[[12]
 [45]]
4496167680
[[10023]
 [  456]
 [  789]
 [ 101112]]
[[1002]
 [  45]]
212
int64
8
(4, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

深拷贝——copy方法

import numpy as np
a = np.arange(1, 13).reshape(4,3)

print(a)
print(id(a))
#获取一二行一二列
sub_a = np.copy(a[:2,:2])
print(sub_a)
print(id(sub_a))

#修改切片的值
sub_a[0][0] = 200
print(a)
print(sub_a)#结果可见不会影响原来数组,深拷贝

print(a.ndim)
print(a.size)
print(a.dtype) #float64 = 8个字节
print(a.itemsize) #以字节为单位
print(a.shape)

print(type(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
4347974160
[[12]
 [45]]
4426006000
[[ 123]
 [ 456]
 [ 789]
 [101112]]
[[2002]
 [  45]]
212
int64
8
(4, 3)
<classnumpy.ndarray>

Process finished with exit code 0

 

修改数组的维度 

技术分享图片

import numpy as np
#一维成二维
a = np.arange(1, 13).reshape(4,3)
print(a)
#一维变三维
c = np.reshape(a, (2,2,3))
print(c)

#多维成一维:
d = a.reshape(12)
print(d)
e = a.reshape(-1)
print(e)
print()

f = c.ravel()
print(f)
g = c.flatten()
print(g)
print()

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123]
 [ 456]
 [ 789]
 [101112]]
[[[ 123]
  [ 456]]

 [[ 789]
  [101112]]]
[ 123456789101112]
[ 123456789101112]

[ 123456789101112]
[ 123456789101112]

 

数组的拼接 

技术分享图片 

技术分享图片

 

 垂直的

技术分享图片

import numpy as np
#一维成二维
a = np.arange(1, 7).reshape(2,3)
b = np.arange(7, 13).reshape(2,3)
print(a)
print(b)

#水平拼接
c = np.hstack((a,b))
print(c)

#垂直拼接
d = np.vstack((a,b))
print(d)
print()

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[123]
 [456]]
[[ 789]
 [101112]]
[[ 123789]
 [ 456101112]]
[[ 123]
 [ 456]
 [ 789]
 [101112]]

 

技术分享图片

import numpy as np
#一维成二维
a = np.arange(1, 7).reshape(2,3)
b = np.arange(7, 13).reshape(2,3)
print(a)
print(b)

#垂直方向
e = np.concatenate((a,b))
print(e)
#水平方向
f = np.concatenate((a,b), axis=1)
print(f)

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[123]
 [456]]
[[ 789]
 [101112]]
[[ 123]
 [ 456]
 [ 789]
 [101112]]
[[ 123789]
 [ 456101112]]

 

三维数组有三个轴=0,1,2

import numpy as np
#一维成二维
a = np.arange(1, 7).reshape(1,2,3)
b = np.arange(7, 13).reshape(1,2,3)
print(a)
print(b)
print()

#垂直方向
e = np.concatenate((a,b))
print(e)
print(e.shape)
#水平方向
f = np.concatenate((a,b), axis=1)
print(f)
print(f.shape)
g = np.concatenate((a,b), axis=2)
print(g)
print(g.shape)
print()

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[[123]
  [456]]]
[[[ 789]
  [101112]]]

[[[ 123]
  [ 456]]

 [[ 789]
  [101112]]]
(2, 2, 3)
[[[ 123]
  [ 456]
  [ 789]
  [101112]]]
(1, 4, 3)
[[[ 123789]
  [ 456101112]]]
(1, 2, 6)

 

数组的分隔 

技术分享图片

import numpy as np
#一维成二维
x = np.arange(1, 7)
a = np.split(x,3) #平均分割成3份,值个数够分隔成这么多,否则报错,返回一个列表对象

print(a)
print(a[0])
print(type(a))

b = np.split(x,[3,5]) #以索引位置值3和值5作为分割线,按位置分割
print(b)
print(type(b))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[array([1, 2]), array([3, 4]), array([5, 6])]
[12]
<classlist>
[array([1, 2, 3]), array([4, 5]), array([6])]
<classlist>

Process finished with exit code 0

 

 二维数组:

import numpy as np
#一维成二维
x = np.arange(1, 17).reshape((4,4))
print(x)
print()

#垂直分隔,行分隔,平均分隔,
a = np.split(x, 2, axis=0) #平均分割成2份,值个数够分隔成这么多,否则报错,返回一个列表对象
print(a)
print(a[0])
print(type(a))
print()

#垂直分隔,行分隔,行索引位置分隔,
b = np.split(x,[1,2], axis=0) #以值3和值5作为分割线
print(b)
print(type(b))
print()

#水平方向,列分隔,平均分隔
c = np.split(x, 2, axis=1) #平均分割成2份,值个数够分隔成这么多,否则报错,返回一个列表对象
print(c)
print(type(c))
print()

#水平方向,列分隔,位置分隔
d = np.split(x,[2,3], axis=1) #以列索引值3和值5作为分割线
print(d)
print(type(d))
print()

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 1234]
 [ 5678]
 [ 9101112]
 [13141516]]

[array([[1, 2, 3, 4],
       [5, 6, 7, 8]]), array([[ 9, 10, 11, 12],
       [13, 14, 15, 16]])]
[[1234]
 [5678]]
<classlist>

[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12],
       [13, 14, 15, 16]])]
<classlist>

[array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]]), array([[ 3,  4],
       [ 7,  8],
       [11, 12],
       [15, 16]])]
<classlist>

[array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]]), array([[ 3],
       [ 7],
       [11],
       [15]]), array([[ 4],
       [ 8],
       [12],
       [16]])]
<classlist>


Process finished with exit code 0

 

hsplit()方法

技术分享图片 

技术分享图片 

技术分享图片 

技术分享图片

 也可以按位置分割,就是省略了axis参数:

 

 vsplit()方法

技术分享图片

上面结果有错,应为:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
        

上面的例子等价于:

import numpy as np
#一维成二维
x = np.arange(1, 17).reshape((4,4))
print(x)
print()

#垂直分隔,行分隔,平均分隔,
a = np.vsplit(x, 2) #平均分割成2份,值个数够分隔成这么多,否则报错,返回一个列表对象
print(a)
print(a[0])
print(type(a))
print()

#垂直分隔,行分隔,行索引位置分隔,
b = np.vsplit(x,[1,2]) #以值3和值5作为分割线
print(b)
print(type(b))
print()

#水平方向,列分隔,平均分隔
c = np.hsplit(x, 2) #平均分割成2份,值个数够分隔成这么多,否则报错,返回一个列表对象
print(c)
print(type(c))
print()

#水平方向,列分隔,位置分隔
d = np.hsplit(x,[2,3]) #以列索引值3和值5作为分割线
print(d)
print(type(d))
print()

 

数组的转置——transpose

import numpy as np
a = np.arange(1,25).reshape((4,6))
print(a, a.shape)
print()

print(转置后a[i][j] -> a[j][i])
b = a.transpose()
print(b, b.shape)
print()

#对二维来说,还可以使用.T
print(a.T)
print()

#numpy中的transpose方法
print(np.transpose(a))
print()

#多维数组进行转置
c = a.reshape((2,3,4))
print(c, c.shape)
print()

print(a[i][j][k] -> a[k][j][i])
d = np.transpose(c)
print(d, d.shape)
print()

#指定维度位置的变换
e = np.transpose(c, (1,0,2)) #即a[i][j][k] -> a[j][i][k]
print(e, e.shape)
print()

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[ 123456]
 [ 789101112]
 [131415161718]
 [192021222324]] (4, 6)

转置后a[i][j] -> a[j][i]
[[ 171319]
 [ 281420]
 [ 391521]
 [ 4101622]
 [ 5111723]
 [ 6121824]] (6, 4)

[[ 171319]
 [ 281420]
 [ 391521]
 [ 4101622]
 [ 5111723]
 [ 6121824]]

[[ 171319]
 [ 281420]
 [ 391521]
 [ 4101622]
 [ 5111723]
 [ 6121824]]

[[[ 1234]
  [ 5678]
  [ 9101112]]

 [[13141516]
  [17181920]
  [21222324]]] (2, 3, 4)

a[i][j][k] -> a[k][j][i]
[[[ 113]
  [ 517]
  [ 921]]

 [[ 214]
  [ 618]
  [1022]]

 [[ 315]
  [ 719]
  [1123]]

 [[ 416]
  [ 820]
  [1224]]] (4, 3, 2)

[[[ 1234]
  [13141516]]

 [[ 5678]
  [17181920]]

 [[ 9101112]
  [21222324]]] (3, 2, 4)


Process finished with exit code 0

 

函数1

算术函数-广播机制

技术分享图片

import numpy as np
a = np.arange(9, dtype=float).reshape(3,3)
b = np.array([10,10,10])

print(加法)
print(np.add(a,b))
print(a+b)
print()

print(减法)
print(np.subtract(b,a))
print(b-a)
print()

print(乘法)
print(np.multiply(a,b))
print(a*b)
print()

print(除法)
print(np.divide(a,b))
print(a/b)

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
加法
[[10. 11. 12.]
 [13. 14. 15.]
 [16. 17. 18.]]
[[10. 11. 12.]
 [13. 14. 15.]
 [16. 17. 18.]]

减法
[[10.  9.  8.]
 [ 7.  6.  5.]
 [ 4.  3.  2.]]
[[10.  9.  8.]
 [ 7.  6.  5.]
 [ 4.  3.  2.]]

乘法
[[ 0. 10. 20.]
 [30. 40. 50.]
 [60. 70. 80.]]
[[ 0. 10. 20.]
 [30. 40. 50.]
 [60. 70. 80.]]

除法
[[0.  0.10.2]
 [0.30.40.5]
 [0.60.70.8]]
[[0.  0.10.2]
 [0.30.40.5]
 [0.60.70.8]]

Process finished with exit code 0

 

使用函数的好处是可以指定输出结果

import numpy as np
a = np.arange(9, dtype=float).reshape(3,3)
print(a)

y = np.empty((3,3))
print(y) #刚好保存的是之前的值
np.multiply(a,10, out=y)
print(y)

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
[[ 0. 10. 20.]
 [30. 40. 50.]
 [60. 70. 80.]]

Process finished with exit code 0

 

数学函数

技术分享图片

import numpy as np
a = np.array([0,30,45,60,90])

print(np.sin(a*np.pi/180))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[0.         0.50.707106780.86602541.        ]

Process finished with exit code 0

 

四舍五入:

技术分享图片

import numpy as np
a = np.array([1.0, 4.55, 123, 0.567, 25.532])

print(np.around(a))
print(np.around(a, decimals=1))
print(np.around(a, decimals=-1))

print(np.floor(a))
print(np.ceil(a))

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
[  1.   5. 123.   1.  26.]
[  1.    4.6123.    0.625.5]
[  0.   0. 120.   0.  30.]
[  1.   4. 123.   0.  25.]
[  1.   5. 123.   1.  26.]

Process finished with exit code 0

 

统计函数

技术分享图片

技术分享图片

import numpy as np
a = np.array([2,3,5,4])
b = np.array([2,2,3,3])

print(np.sum(a))
print(np.prod(a))
print(np.mean(a))

print(np.std(a))
print(np.var(a))

print()
#多维的都可以指定轴
print(np.median(a)) #如果顺序是乱的,那么会自己排序
d = np.arange(1,13).reshape(3,4)
print(d)
print(np.median(d, axis=0)) #垂直轴
print(np.median(d, axis=1)) #水平轴
print()

print(np.power(a,b))
print(np.power(a,2))
print(np.min(a))
print(np.max(a))
print(np.argmin(a))
print(np.argmax(a))

print(np.exp(a)) #e^a

c = np.array([10,10,np.e])
print(np.log(c)) #以e为底数的对数
print()

x = np.arange(5)
print(x)
y = np.zeros(10)
print(y)
np.power(x,2, out=y[1:6]) #指明存放位置
print(y)

返回:

/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
141203.51.1180339887498951.253.5
[[ 1234]
 [ 5678]
 [ 9101112]]
[5. 6. 7. 8.]
[ 2.56.510.5]

[  4912564]
[ 492516]
2502
[  7.389056120.08553692148.413159154.59815003]
[2.302585092.302585091.        ]

[01234]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0.  0.  1.  4.  9. 16.  0.  0.  0.  0.]

Process finished with exit code 0

 

原文:https://www.cnblogs.com/wanghui-garcia/p/11188702.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐