【python数据分析】numpy基本使用方法之二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN_fzs/article/details/81176942
#布尔值索引
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Bob'])     #7个数据的数组
data = np.random.random((7,4))   #随机生成7*4的数组
print(data)
print('----------------------------------------------------------1------')
names == 'Bob'
print(data[names == 'Bob'])   #将names数组映射到data多维数组中,输出'Bob'所在的数组(第1、4、7行)
print('----------------------------------------------------------2------')
print(data[names == 'Bob',2:])
print('----------------------------------------------------------3------')
names != 'Bob'
print(data[~(names == 'Bob')])    #将names数组映射到data多维数组中,输出不是'Bob'所在的数组(第2、3、5、6行)
print('----------------------------------------------------------4------')
mask = (names == 'Bob') | (names == 'Will')     #将names数组映射到data多维数组中,输出是'Bob'和'Will'所在的数组(第1、3、4、5、7行)  
print(data[mask])
[[ 0.05764287  0.5674934   0.25030112  0.23331812]
 [ 0.46116589  0.42389381  0.99367302  0.3413934 ]
 [ 0.62409006  0.53980935  0.20271535  0.93853548]
 [ 0.26932701  0.96266169  0.26549336  0.2710549 ]
 [ 0.83258971  0.85671927  0.66177204  0.17250801]
 [ 0.2554702   0.73446975  0.27736334  0.58976844]
 [ 0.17684312  0.28060143  0.33985248  0.08767378]]
----------------------------------------------------------1------
[[ 0.05764287  0.5674934   0.25030112  0.23331812]
 [ 0.26932701  0.96266169  0.26549336  0.2710549 ]
 [ 0.17684312  0.28060143  0.33985248  0.08767378]]
----------------------------------------------------------2------
[[ 0.25030112  0.23331812]
 [ 0.26549336  0.2710549 ]
 [ 0.33985248  0.08767378]]
----------------------------------------------------------3------
[[ 0.46116589  0.42389381  0.99367302  0.3413934 ]
 [ 0.62409006  0.53980935  0.20271535  0.93853548]
 [ 0.83258971  0.85671927  0.66177204  0.17250801]
 [ 0.2554702   0.73446975  0.27736334  0.58976844]]
----------------------------------------------------------4------
[[ 0.05764287  0.5674934   0.25030112  0.23331812]
 [ 0.62409006  0.53980935  0.20271535  0.93853548]
 [ 0.26932701  0.96266169  0.26549336  0.2710549 ]
 [ 0.83258971  0.85671927  0.66177204  0.17250801]
 [ 0.17684312  0.28060143  0.33985248  0.08767378]]
data=data.astype(np.string_)
data[names == 'Bob'] = 'Bob'          #将names中'Bob'映射到data数组中的数据改为'Bob'
data[names == 'Joe'] = 'Joe'
data[names == 'Will'] = 'Will'
data
array([[b'Bob', b'Bob', b'Bob', b'Bob'],
       [b'Joe', b'Joe', b'Joe', b'Joe'],
       [b'Will', b'Will', b'Will', b'Will'],
       [b'Bob', b'Bob', b'Bob', b'Bob'],
       [b'Will', b'Will', b'Will', b'Will'],
       [b'Joe', b'Joe', b'Joe', b'Joe'],
       [b'Bob', b'Bob', b'Bob', b'Bob']],
      dtype='|S32')
#花式索引----利用整数数组进行索引
arr = np.empty((8,4))
print(arr)
for i in range(8):
    arr[i] = i
print('----------------------------------------------------------1------')
print(arr)
print('----------------------------------------------------------2------')
print(arr[[4,3,0,6]])          #输出数据为4,3,0,6的行
print('----------------------------------------------------------3------')
print(arr[[-3,-5,-7]])          #输出倒数第3行,倒数第5行,倒数第7行
[[  2.05833592e-312   2.05833592e-312   2.12199579e-312   2.46151512e-312]
 [  9.76118064e-313   2.44029516e-312   2.56761491e-312   2.14321575e-312]
 [  2.33419537e-312   9.76118064e-313   2.46151512e-312   2.22809558e-312]
 [  2.18565567e-312   8.70018275e-313   2.12199579e-312   2.46151512e-312]
 [  1.93101617e-312   2.05833592e-312   2.14321575e-312   6.79038654e-313]
 [  1.29441743e-312   8.27578359e-313   2.35541533e-312   8.27578359e-313]
 [  6.79038654e-313   6.79038653e-313   1.40051722e-312   2.07955588e-312]
 [  2.12199579e-313   2.12199579e-312   2.46151512e-312   4.71294404e+257]]
----------------------------------------------------------1------
[[ 0.  0.  0.  0.]
 [ 1.  1.  1.  1.]
 [ 2.  2.  2.  2.]
 [ 3.  3.  3.  3.]
 [ 4.  4.  4.  4.]
 [ 5.  5.  5.  5.]
 [ 6.  6.  6.  6.]
 [ 7.  7.  7.  7.]]
----------------------------------------------------------2------
[[ 4.  4.  4.  4.]
 [ 3.  3.  3.  3.]
 [ 0.  0.  0.  0.]
 [ 6.  6.  6.  6.]]
----------------------------------------------------------3------
[[ 5.  5.  5.  5.]
 [ 3.  3.  3.  3.]
 [ 1.  1.  1.  1.]]
arr1 = np.arange(32).reshape((8,4))
print(arr1)
print('----------------------------------------------------------1------')
print(arr1[[1,5,7,2],[0,3,1,2]])    #输出下标为(1,0),(5,3),(7,1),(2,2)的数据
print('----------------------------------------------------------2------')
print(arr1[[1,5,7,2]][:, [0,3,1,2]])   #输出下标为1,5,7,2的行。下标为1的行,对应下标为0的列。下标为5的行,对应下标为3的列。
print('----------------------------------------------------------3------')
print(arr1[np.ix_([1,5,7,2],[0,3,1,2])])   #效果同上
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]
----------------------------------------------------------1------
[ 4 23 29 10]
----------------------------------------------------------2------
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]
----------------------------------------------------------3------
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]
#数组转置 -> 数组.T
arr = np.arange(15).reshape(3,5)
print(arr)
print('----------------------------------------------------------1------')
print(arr.T)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
----------------------------------------------------------1------
[[ 0  5 10]
 [ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]]
#改变数据的维度    
b = np.arange(24).reshape(2,3,4)    #reshape改变维度:一维变多维。
print(b)
print('----------------------------------------------------------1------')
print(b.ravel())                   #ravel改变维度:多维变一维。(flatten()也一样)
print('----------------------------------------------------------2------')
b.shape = (6,4)                 #设置shape也可以直接设置数组的维度。
print(b)
print('----------------------------------------------------------2------')
print(b.resize((12,2)))         #resize也可以向shape那样改变维度,但是resize只是临时的。
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
----------------------------------------------------------1------
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
----------------------------------------------------------2------
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]

猜你喜欢

转载自blog.csdn.net/CSDN_fzs/article/details/81176942