np.tile 和np.newaxis

 output
array([[ 0.24747071, -0.43886742],
       [-0.03916734, -0.70580089],
       [ 0.00462337, -0.51431584],
       ..., 
       [ 0.15071507, -0.57029653],
       [ 0.06246116, -0.33766761],
       [ 0.08218585, -0.59906501]], dtype=float32)

ipdb> np.shape(output)
(64, 2)

ipdb> np.max(output, axis=1)[:,np.newaxis]
array([[ 0.24747071],
       [-0.03916734],
       [ 0.00462337],
       ..., 
       [ 0.15071507],
       [ 0.06246116],
       [ 0.08218585]], dtype=float32)

ipdb> np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2]))
*** SyntaxError: invalid syntax (<stdin>, line 1)

ipdb> np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2])
array([[ 0.24747071,  0.24747071],
       [-0.03916734, -0.03916734],
       [ 0.00462337,  0.00462337],
       ..., 
       [ 0.15071507,  0.15071507],
       [ 0.06246116,  0.06246116],
       [ 0.08218585,  0.08218585]], dtype=float32)

ipdb> output
array([[ 0.24747071, -0.43886742],
       [-0.03916734, -0.70580089],
       [ 0.00462337, -0.51431584],
       ..., 
       [ 0.15071507, -0.57029653],
       [ 0.06246116, -0.33766761],
       [ 0.08218585, -0.59906501]], dtype=float32)

ipdb> np.max(output, axis=1)
array([ 0.24747071, -0.03916734,  0.00462337, ...,  0.15071507,
        0.06246116,  0.08218585], dtype=float32)
ipdb> np.exp(output - np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2]))
array([[ 1.        ,  0.50341612],
       [ 1.        ,  0.51343411],
       [ 1.        ,  0.59515154],
       ..., 
       [ 1.        ,  0.48626012],
       [ 1.        ,  0.67023373],
       [ 1.        ,  0.50598365]], dtype=float32)

1- np.newaxis

np.newaxis的功能是插入新维度,看下面的例子:

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

print a

输出结果

(5,)
[1 2 3 4 5]

可以看出a是一个一维数组,

x_data=np.linspace(-1,1,300)[:,np.newaxis]
a=np.array([1,2,3,4,5])
b=a[np.newaxis,:]
print a.shape,b.shape
print a

print b

输出结果:

(5,) (1, 5)
[1 2 3 4 5]
[[1 2 3 4 5]]


x_data=np.linspace(-1,1,300)[:,np.newaxis]
a=np.array([1,2,3,4,5])
b=a[:,np.newaxis]
print a.shape,b.shape
print a
print b

输出结果

(5,) (5, 1)
[1 2 3 4 5]
[[1]
 [2]
 [3]
 [4]
 [5]]

可以看出np.newaxis分别是在行或列上增加维度,原来是(6,)的数组,在行上增加维度变成(1,6)的二维数组,在列上增加维度变为(6,1)的二维数组

2. np.tile

函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出

 其中A和reps都是array_like的参数,A可以是:array,list,tuple,dict,matrix以及基本数据类型int,string,float以及bool类型,reps的类型可以是tuple,list,dict,array,int,bool,但不可以是float,string,matrix类型。

计较常用的形式有两种,是将A简单进行一维重复输出,和将A进行二维重复后输出。
一维重复:

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

#输出为
#[[1 2 3 1 2 3 1 2 3]
# [4 5 5 4 5 5 4 5 5]]

二维重复:#上面的一维重复相当于 b = np.tile(a,[1,3])

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

#输出为:
#[[1 2 3 1 2 3 1 2 3]
# [4 5 5 4 5 5 4 5 5]
# [1 2 3 1 2 3 1 2 3]
# [4 5 5 4 5 5 4 5 5]]

2.1 np.tile

numpy.tile()是个什么函数呢,说白了,就是把数组沿各个方向复制

比如 a = np.array([0,1,2]),    np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍,即没有复制,仍然是 [0,1,2]。 再把结果沿y方向复制2倍,即最终得到

 array([[0,1,2],

             [0,1,2]])

同理:

>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, 2) #沿X轴复制2倍
array([[1, 2, 1, 2],
       [3, 4, 3, 4]])
>>> np.tile(b, (2, 1))#沿X轴复制1倍(相当于没有复制),再沿Y轴复制2倍
array([[1, 2],
       [3, 4],
       [1, 2],
       [3, 4]])

numpy.tile()具体细节,如下:

numpy. tile ( Areps )

Construct an array by repeating A the number of times given by reps.

If reps has length d, the result will have dimension of max(d, A.ndim).

If A.ndim < dA is promoted to be d-dimensional by prepending new axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication. If this is not the desired behavior, promote A to d-dimensions manually before calling this function.

If A.ndim > dreps is promoted to A.ndim by pre-pending 1’s to it. Thus for an A of shape (2, 3, 4, 5), a repsof (2, 2) is treated as  (1, 1, 2, 2).

Note : Although tile may be used for broadcasting, it is strongly recommended to use numpy’s broadcasting operations and functions.

Parameters:

A : array_like

The input array.

reps : array_like

The number of repetitions of A along each axis.

Returns:

c : ndarray

The tiled output array.

See also

repeat
Repeat elements of an array.
broadcast_to
Broadcast an array to a new shape

Examples

>>>
>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
>>> np.tile(a, (2, 2))
array([[0, 1, 2, 0, 1, 2],
       [0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
       [[0, 1, 2, 0, 1, 2]]])
>>>
>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, 2)
array([[1, 2, 1, 2],
       [3, 4, 3, 4]])
>>> np.tile(b, (2, 1))
array([[1, 2],
       [3, 4],
       [1, 2],
       [3, 4]])
>>>
>>> c = np.array([1,2,3,4])
>>> np.tile(c,(4,1))
array([[1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4]])



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import pandas as pd data = pd.read_excel('C:\Users\home\Desktop\新建文件夹(1)\支撑材料\数据\111.xlsx','Sheet5',index_col=0) data.to_csv('data.csv',encoding='utf-8') import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt df = pd.read_csv(r"data.csv", encoding='utf-8', index_col=0).reset_index(drop=True) df from sklearn import preprocessing df = preprocessing.scale(df) df covX = np.around(np.corrcoef(df.T),decimals=3) covX featValue, featVec= np.linalg.eig(covX.T) featValue, featVec def meanX(dataX): return np.mean(dataX,axis=0) average = meanX(df) average m, n = np.shape(df) m,n data_adjust = [] avgs = np.tile(average, (m, 1)) avgs data_adjust = df - avgs data_adjust covX = np.cov(data_adjust.T) covX featValue, featVec= np.linalg.eig(covX) featValue, featVec tot = sum(featValue) var_exp = [(i / tot) for i in sorted(featValue, reverse=True)] cum_var_exp = np.cumsum(var_exp) plt.bar(range(1, 14), var_exp, alpha=0.5, align='center', label='individual explained variance') plt.step(range(1, 14), cum_var_exp, where='mid', label='cumulative explained variance') plt.ylabel('Explained variance ratio') plt.xlabel('Principal components') plt.legend(loc='best') plt.show() eigen_pairs = [(np.abs(featValue[i]), featVec[:, i]) for i in range(len(featValue))] eigen_pairs.sort(reverse=True) w = np.hstack((eigen_pairs[0][1][:, np.newaxis], eigen_pairs[1][1][:, np.newaxis])) X_train_pca = data_adjust.dot(w) colors = ['r', 'b', 'g'] markers = ['s', 'x', 'o'] for l, c, m in zip(np.unique(data_adjust), colors, markers): plt.scatter(data_adjust,data_adjust, c=c, label=l, marker=m) plt.xlabel('PC 1') plt.ylabel('PC 2') plt.legend(loc='lower left') plt.show()
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值