目录
numpy的索引和切片
In [1]: import numpy
In [2]: import numpy as np
In [3]: x = np.arange(10)
In [4]: x
Out[4]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [5]: x = np.arange(20).reshape(4,5)# 生成0-20的四行五列的数组
In [6]: x
Out[6]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [7]: x = np.arange(10)
In [8]: x
Out[8]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [9]: print(x[0],x[1],x[4])
0 1 4
In [10]: x[-1]
Out[10]: 9
In [11]: x[0:4]
Out[11]: array([0, 1, 2, 3])
In [12]: x[-3:]
Out[12]: array([7, 8, 9])
In [13]: x[::-1]
Out[13]: array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
In [14]: x = np.arange(20).reshape(4,5)
In [15]: x
Out[15]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [17]: x[0,0]
Out[17]: 0
In [18]: x[0,1]
Out[18]: 1
In [19]: x[-1,1]
Out[19]: 16
In [20]:
In [20]: x[2]
Out[20]: array([10, 11, 12, 13, 14])
In [21]: x[:-1]
Out[21]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [22]: x[:]
Out[22]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [23]: x[0][0]
Out[23]: 0
In [24]: x
Out[24]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [25]: x[:,2]
Out[25]: array([ 2, 7, 12, 17])
In [26]: import random
In [27]: arr = np.random.randint(1,101,10)
In [28]: arr
Out[28]: array([63, 92, 88, 11, 38, 1, 54, 92, 18, 84])
In [29]: arr.argsort()
Out[29]: array([5, 3, 8, 4, 6, 0, 9, 2, 1, 7], dtype=int64)
In [30]: arr.argsort()# 返回的是对应的最大数的下标
Out[30]: array([5, 3, 8, 4, 6, 0, 9, 2, 1, 7], dtype=int64)
In [31]: arr.argsort()# sort的兄弟,将原数组排序但不改变原来数组,返回一个数组其由原数组的下标组成
Out[31]: array([5, 3, 8, 4, 6, 0, 9, 2, 1, 7], dtype=int64)
In [32]: arr.argsort(reverse= True)# argsort不能像sort哪像传递一个reverse参数将其逆序排序
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-32-2462b6925a8d> in <module>
----> 1 arr.argsort(reverse= True)# sort的兄弟,将原数组排序但不改变原来数组,返回一个数组其由原数组的下标组成
TypeError: 'reverse' is an invalid keyword argument for argsort()
In [33]: arr[arr.argsort()[-3:]]
Out[33]: array([88, 92, 92])
In [34]: X = np.arange(20).reshape(4,5)
In [35]: X
Out[35]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [37]: X[[0,2,3],[0,2,4]]
Out[37]: array([ 0, 12, 19])
In [38]: X[[0,2,3],[0,2,4]]# 前面一个是行,后面一个是列,两个组合成一个新的坐标定位到指定的元素,所以返回的是一个一维数组
Out[38]: array([ 0, 12, 19])
In [39]: X[[0,2],[1,3,4]]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-39-795854cfb94b> in <module>
----> 1 X[[0,2],[1,3,4]]
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (3,)
In [40]: # 由此可见前后两个数组的长度要一致,不然会报错
In [41]: x
Out[41]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
bool数据类型
In [43]: x = np.arange(10)
In [44]: x
Out[44]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [45]: x>5
Out[45]:
array([False, False, False, False, False, False, True, True, True,
True])
In [46]: # 上面的就是bool数组
In [58]: x
Out[58]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [59]: x[x<=5] = 0
In [60]: x[x>5] = 1
In [61]: x
Out[61]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])
In [62]: X
Out[62]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [63]: X > 5
Out[63]:
array([[False, False, False, False, False],
[False, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]])
In [64]: X[X > 5]
Out[64]: array([ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
In [65]: x
Out[65]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])
In [66]: x = np.arange(10)
In [67]: condition = (x%2==0)|x==0
In [68]: condition
Out[68]:
array([False, False, False, False, False, False, False, False, False,
False])
In [69]: x
Out[69]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [70]: condition
Out[70]:
array([False, False, False, False, False, False, False, False, False,
False])
In [71]: condition = (x%2==0)|(x==0) #组合条件的使用要在条件符的左右都要加上括号,不然就像70行那样出现全False的现象
In [72]: condition
Out[72]:
array([ True, False, True, False, True, False, True, False, True,
False])
In [73]:
In [73]: X
Out[73]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [74]: X[2] = 600
In [75]: X
Out[75]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[600, 600, 600, 600, 600],
[ 15, 16, 17, 18, 19]])
In [76]: X[,2] = 600# 要想改变整列,要在逗号前面加上冒号:
File "<ipython-input-76-65662dea2d9e>", line 1
X[,2] = 600
^
SyntaxError: invalid syntax
In [77]: X[",2] = 600
File "<ipython-input-77-f23c40fc3fef>", line 1
X[",2] = 600
^
SyntaxError: EOL while scanning string literal
In [78]: X[:,2] = 600
In [79]: X
Out[79]:
array([[ 0, 1, 600, 3, 4],
[ 5, 6, 600, 8, 9],
[600, 600, 600, 600, 600],
[ 15, 16, 600, 18, 19]])
In [80]: arr
Out[80]: array([63, 92, 88, 11, 38, 1, 54, 92, 18, 84])
In [81]: arr[[92,88]]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-81-52e6ef6fc7ea> in <module>
----> 1 arr[[92,88]]
IndexError: index 92 is out of bounds for axis 0 with size 10
In [82]: arr[[0,1]]
Out[82]: array([63, 92])
In [83]: arr.sort()
In [84]: arr
Out[84]: array([ 1, 11, 18, 38, 54, 63, 84, 88, 92, 92])
In [85]: arr.argsort()
Out[85]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
numpy随机数函数
numpy.random.rand(d0, d1, …, dn)
In [86]: np.random.seed(100)# 生成随机数种子,确保每次生成的随机数都是随机的
In [87]: np.random.rand(3,5)# 生成一个三行五列的值在0-1之间的随机数数组
Out[87]:
array([[0.54340494, 0.27836939, 0.42451759, 0.84477613, 0.00471886],
[0.12156912, 0.67074908, 0.82585276, 0.13670659, 0.57509333],
[0.89132195, 0.20920212, 0.18532822, 0.10837689, 0.21969749]])
In [93]: np.random.rand(2,3,4)# 生成两大块,每一块都是由三行五列的数组组成
Out[93]:
array([[[0.07898787, 0.31135313, 0.63238359, 0.69935892],
[0.64196495, 0.92002378, 0.29887635, 0.56874553],
[0.17862432, 0.5325737 , 0.64669147, 0.14206538]],
[[0.58138896, 0.47918994, 0.38641911, 0.44046495],
[0.40475733, 0.44225404, 0.03012328, 0.77600531],
[0.55095838, 0.3810734 , 0.52926578, 0.9568769 ]]])
numpy.random.randn(d0, d1, …, dn)
In [94]: np.random.randn(5)# 生成0左右的满足正态分布的5个数
Out[94]: array([ 0.37196757, 0.35975395, -0.14039647, -0.44373851, 0.56877016])
In [95]: np.random.randn(3,5)# 生成由三行五列的数组组成
Out[95]:
array([[ 0.53848877, 1.31557418, 1.4789783 , 0.22142626, -1.11789416],
[-0.18499993, -0.43118745, 0.14253625, -1.49639345, 0.30687456],
[-0.04634723, 0.41714428, -0.60377052, 0.68596725, 0.85997379]])
In [96]: np.random.randn(2,3,5)# randn满足正态分布,生成两大块,每一块都是由三行五列的数组组成
Out[96]:
array([[[ 0.19155544, 1.17822793, 0.60028357, -1.84465986,
0.04258809],
[-0.02408499, 0.38405784, -0.0490925 , -1.60169118,
-0.13876257],
[ 0.01208627, -1.29814417, -0.12888604, -0.28292163,
-0.17916825]],
[[ 0.67575177, 2.38059534, -1.14670086, -0.29114335,
-0.85422577],
[ 0.86340647, -0.31638123, -0.90222577, -0.73856239,
-0.39533888],
[ 0.08420085, -0.18562245, 1.10843923, 1.29821024,
0.24722299]]])
numpy.random.randint(low[, high, size=, dtype=])
In [97]: np.random.randint(100)# 生成一个0-100的整数
Out[97]: 93
In [98]: np.random.randint(90,100)# 生成一个90-100的整数
Out[98]: 92
In [99]: np.random.randint(2,90,100)#
Out[99]:
array([84, 9, 4, 65, 4, 89, 19, 76, 55, 32, 69, 30, 39, 84, 19, 12, 15,
83, 27, 68, 17, 13, 40, 24, 57, 59, 89, 53, 50, 55, 19, 67, 44, 46,
18, 53, 56, 57, 85, 44, 63, 39, 82, 4, 64, 83, 18, 72, 55, 49, 50,
11, 51, 55, 36, 5, 13, 51, 31, 38, 69, 28, 54, 38, 75, 33, 87, 70,
85, 73, 63, 38, 44, 15, 50, 84, 34, 40, 42, 55, 16, 40, 88, 39, 2,
61, 43, 46, 21, 78, 68, 15, 89, 67, 70, 56, 2, 89, 85, 12])
In [4]: np.random.randint(1,100,size=(1,5))# 生成一个1-100的一行五列的数组
Out[4]: array([[66, 5, 35, 71, 71]])
numpy.random.random(size=)
In [5]: np.random.random(5)# 生成0-1的五个随机数
Out[5]: array([0.39925098, 0.17363531, 0.53192093, 0.45290461, 0.56029424])
In [6]: np.random.random(3,5)# 要指定行和列就要在参数中加入size=()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-de6868792412> in <module>
----> 1 np.random.random(3,5)
mtrand.pyx in numpy.random.mtrand.RandomState.random()
TypeError: random() takes at most 1 positional argument (2 given)
In [7]: np.random.random(size=(3,5))# 加入size=()后就可生成三行五列的数组,也可以生成多块的数组
Out[7]:
array([[0.70770948, 0.91207859, 0.55372324, 0.37367461, 0.12228909],
[0.26319125, 0.81099784, 0.43409048, 0.42806711, 0.22827341],
[0.74741093, 0.89216893, 0.85213802, 0.85259035, 0.87134415]])
In [8]: np.random.random(size=(2,3,5))
Out[8]:
array([[[0.67864221, 0.22001716, 0.43813613, 0.16184834, 0.74331783],
[0.44713193, 0.99737105, 0.35041559, 0.8868409 , 0.11933391],
[0.31406661, 0.72283009, 0.62320291, 0.43899082, 0.66207874]],
[[0.23873932, 0.26411096, 0.33015157, 0.22685903, 0.19963779],
[0.26039453, 0.87693293, 0.32243481, 0.0792408 , 0.38233775],
[0.25042082, 0.89432103, 0.
numpy.random.choice(a, size[, replace=, p=])
In [9]: np.random.choice(5,3)# 从前面一个参数中挑选数据,参数可以是整数也可以是数组,如果是整数,则从其range()中挑选数字
Out[9]: array([2, 1, 0])
In [10]: np.random.choice([123,321],2)
Out[10]: array([123, 321])
In [11]: np.random.choice(10,(3,5))# 可以创建多维数组,前提是要在多维数组前面加上括号
Out[11]:
array([[3, 7, 4, 9, 4],
[2, 8, 6, 4, 8],
[2, 4, 2, 7, 5]])
In [12]: arr =np.arange(20)
In [13]: arr
Out[13]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
numpy.random.shuffle(x)
In [15]: np.random.suffle(arr)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-15-4358f4e4f534> in <module>
----> 1 np.random.suffle(arr)
AttributeError: module 'numpy.random' has no attribute 'suffle'
In [16]: np.random.shuffle(arr)# 将原数组打乱
In [17]: arr
Out[17]:
array([17, 6, 3, 18, 9, 13, 4, 16, 11, 7, 10, 12, 2, 5, 15, 0, 8,
1, 14, 19])
In [18]: arr = np.arange(20).reshape(3,5)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-18-88595c1cf707> in <module>
----> 1 arr = np.arange(20).reshape(3,5)
ValueError: cannot reshape array of size 20 into shape (3,5)# 出现这个错误的原因是 数据有二十个,但是却要求分成三行五列,无法做到,所以会报错
In [19]: arr = np.arange(20).reshape(4,5)
In [20]: arr
Out[20]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [21]: arr.random.shuffle()# shuffle的使用是np.random.shuffle(arr)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-21-632a326cc8c1> in <module>
----> 1 arr.random.shuffle()
AttributeError: 'numpy.ndarray' object has no attribute 'random'
In [22]: np.random.shuffle(arr)# shuffle对多维数组的打乱只是在行之间打乱,行内不打乱
In [23]: arr
Out[23]:
array([[10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4],
[15, 16, 17, 18, 19],
[ 5, 6, 7, 8, 9]])
numpy.random.permutation(x)
In [24]: np.random.permutation(10)# permutation(10)是生成0-10的数组,并将其随机排序,相当于,arr = np.arange(10),np.random.shuffle(arr)
Out[24]: array([6, 3, 7, 0, 8, 2, 1, 4, 5, 9])
In [25]: arr = np.arange(10).reshape(2,5)
In [26]: arr
Out[26]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
In [27]: np.random.permutation(arr)#
Out[27]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
In [28]: np.random.permutation(arr)
Out[28]:
array([[5, 6, 7, 8, 9],
[0, 1, 2, 3, 4]])
In [29]: arr
Out[29]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])# 说明在permutation后生成的是原数组的copy,原来的数组不会改变
numpy.random.uniform(low=0.0, high=1.0, size=None)平均分布
numpy.random.normal(loc=0.0, scale=1.0, size=None)高斯分布
In [42]: numpy.random.uniform(low=0.0, high=1.0, size=None)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-42-f082a9e3d12d> in <module>
----> 1 numpy.random.uniform(low=0.0, high=1.0, size=None)
NameError: name 'numpy' is not defined
In [43]: np.random.uniform(0,10,size=(2,5))
Out[43]:
array([[2.83152316, 4.31476876, 4.67180992, 4.38012 , 6.49968333],
[4.25484468, 3.99455413, 0.67276926, 2.04183267, 5.06723771]])
In [44]: np.random.normal(-10,10,size=(2,10))
Out[44]:
array([[ 2.70299431, 9.33367226, -9.01903493, -9.35720587,
-16.85959447, -9.22159077, -17.40660452, -9.17373511,
-10.49564623, -5.73129811],
[ -9.03227025, -15.18617316, -27.68724923, 2.24774268,
3.9663481 , -13.29659365, -5.55824628, 7.13094563,
-12.95769011, -9.23706864]])
运用
import matplotlib.pyplot as plt
x = np.random.linspace(-10,10,100)
y = np.sin(x)
plt.plot(x,y)
plot.show()# 完美的图线
x = np.random.lonspace(-10,10,100)
y =np.sin(x) + np.random.rand(len(x))
plt.plot(x,y)
plot.show()# 加入了噪音,图线变得不规整
科学计算
arr.sum([axis=0,1])求和arr,cumsum([axis=0,1])累加
In [4]: arr = np.arange(12).reshape(3,4)
In [5]: arr
Out[5]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [6]: arr.sum()# 不指定axis,则将多维数组看成一维数组进行加和
Out[6]: 66
In [7]: arr.cumsum()
Out[7]: array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
In [8]: arr.sum(axis=0)# 指定了axis=0是列优先加和
Out[8]: array([12, 15, 18, 21])
In [9]: arr.sum(axis=1)# 指定了axis=0是行优先加和
Out[9]: array([ 6, 22, 38])
In [10]: arr.cumsum(axis=0)
Out[10]:
array([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]], dtype=int32)
In [11]: arr.cumsum(axis=1)
Out[11]:
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]], dtype=int32)
arr.prod(axis=0.1)乘积
arr.cumprod(axis=0.1)累乘
In [12]: arr.prod()# 乘积
Out[12]: 0
In [13]: arr.cumprod()# 累乘
Out[13]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
In [14]: arr.prod(axis=0)
Out[14]: array([ 0, 45, 120, 231])
In [15]: arr.prod(axis=1)
Out[15]: array([ 0, 840, 7920])
In [16]: arr.cumprod(axis=0)
Out[16]:
array([[ 0, 1, 2, 3],
[ 0, 5, 12, 21],
[ 0, 45, 120, 231]], dtype=int32)
In [17]: arr.cumprod(axis=1)
Out[17]:
array([[ 0, 0, 0, 0],
[ 4, 20, 120, 840],
[ 8, 72, 720, 7920]], dtype=int32)
np.median(arr)中位数
np.mean(arr)平均值
np.percentile(arr,[25])去arr数组第25%位置上的数据
np.quantle(arr,[0.25])同上
np.std(arr)标准差
np.var(arr)方差
np.average(arr,weights=)加权平均数
In [18]: np.median(arr)# 中位数
Out[18]: 5.5
In [19]: np.percentile(arr,[25,50,75])# 分别取arr第25%,50%,75%的数据
Out[19]: array([2.75, 5.5 , 8.25])
In [20]: np.quantile(arr,[0.25,0.50,0.75])
Out[20]: array([2.75, 5.5 , 8.25])
In [21]: np.mean(arr)# 平均值
Out[21]: 5.5
In [23]: np.std(arr)# 标准差
Out[23]: 3.452052529534663
In [24]: np.var(arr)# 方差
Out[24]: 11.916666666666666
In [25]: weight = np.random.rand(*arr.shape)# 这里的arr前面要加上* ,作用是将多维数组分割传入方法中
In [26]: np.average(arr,weights = weight)# 求加权平均数
Out[26]: 4.748652433748566
运用
数据标准化:
●对于机器学习、神经网络来说,不同列的量纲应该相同,训练收敛的更快;
●比如商品的价格是0到10元、销量是1万到10万个,这俩数字没有可比性,因此需要先都做标准化;
●不同列代表不同的特征,因此需要axis=0做计算
●标准化-般使用A = (A- mean(A, axis=0)) I std(A, axis=0)公式进行
In [37]: arr2 = np.random.randint(1,100,size=(3,4))
In [38]: arr2
Out[38]:
array([[62, 3, 30, 33],
[49, 1, 43, 68],
[12, 32, 34, 58]])
In [48]: mean = np.mean(arr2,axis=0)
In [50]: std = np.std(arr2,axis=0)
In [51]: fenzi = arr - mean # 这里运用了广播,arr是二维数组,mean是一维数组,两者相减,将mean复制为二维数组再将两者进行相减
In [52]: result = fenzi/std
In [53]: result
Out[53]:
array([[-1.93562826, -0.77652433, -6.19270733, -3.3968311 ],
[-1.74678648, -0.49415185, -5.45694012, -3.12508461],
[-1.5579447 , -0.21177936, -4.72117291, -2.85333813]])
改变维度
arr[np.newaxis,:]
np.expand_dims(arr,axis=0,1)
np.reshape(arr,())
In [2]: arr = np.arange(5)
In [3]: arr
Out[3]: array([0, 1, 2, 3, 4])
In [4]: arr[np.newaxis,:]
Out[4]: array([[0, 1, 2, 3, 4]])
In [5]: arr.shape
Out[5]: (5,)
In [6]: arr[np.newaxis,:].shape
Out[6]: (1, 5)
In [7]: np.expand_dims(arr,axis=0)# 行的维度上增加一
Out[7]: array([[0, 1, 2, 3, 4]])
In [8]: np.expand_dims(arr,axis=0).shape
Out[8]: (1, 5)
In [9]: np.expand_dims(arr,axis=1).shape
Out[9]: (5, 1)
In [10]: np.expand_dims(arr,axis=1)# 列的温度上,根据原来异味数据的长度扩大
Out[10]:
array([[0],
[1],
[2],
[3],
[4]])
In [11]: np.reshape(arr,(1,-1))# 默认-1为元素总个数
Out[11]: array([[0, 1, 2, 3, 4]])
In [12]: np.reshape(arr,(1,5))
Out[12]: array([[0, 1, 2, 3, 4]])
增加和合并数组
np.concatenate([arr1,arr2,...],axis=1)np.vs.stack([arr1.arr2],...)
np.row_satck([arr1,arr2,...])三个都是列相同,进行行的合并
In [18]: a = np.arange(12).reshape(3,4)
In [19]: b = np.random.randint(10,20,size=(4,4))
In [20]: a
Out[20]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [21]: b
Out[21]:
array([[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])
In [22]: np.vstack([a,b])
Out[22]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])
In [23]: np.row_stack([a,b])
Out[23]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])
In [26]: np.concatenate([a,b])
Out[26]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])
np.hstack([arr1,arr2…])
np.column_stack([arr1,arr2…])
np.concatenate9([arr1,arr2,…],axis=0)三个都是将数组进行行相同,进进行列的合并
In [29]: a = np.arange(16).reshape(4,4)
In [30]: a
Out[30]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
In [31]: b
Out[31]:
array([[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])
In [32]: np.hstack([a,b])
Out[32]:
array([[ 0, 1, 2, 3, 11, 16, 11, 15],
[ 4, 5, 6, 7, 16, 17, 12, 19],
[ 8, 9, 10, 11, 12, 19, 14, 12],
[12, 13, 14, 15, 12, 18, 19, 12]])
In [33]: np.column_stack([a,b])
Out[33]:
array([[ 0, 1, 2, 3, 11, 16, 11, 15],
[ 4, 5, 6, 7, 16, 17, 12, 19],
[ 8, 9, 10, 11, 12, 19, 14, 12],
[12, 13, 14, 15, 12, 18, 19, 12]])
In [34]: np.concatenate([a,b],axis=0)
Out[34]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[11, 16, 11, 15],
[16, 17, 12, 19],
[12, 19, 14, 12],
[12, 18, 19, 12]])