Python之NumPy数组应用

 
### NumPy最重要的一个特点就是其N维数组对象(即ndarray)

NumPy最重要的一个特点就是其N维数组对象(即ndarray)

 
###  该对象是一个快速而灵活的大数据集容器。 

该对象是一个快速而灵活的大数据集容器。

In [1]:
 
import numpy as np
data = [2,4,1.2,34,0]
# 基本类型数组
array = np.array(data)
print(array)
# 嵌套类型数组
data_qt = [[1,3,5,7],[2,4,6,8]]
array_qt = np.array(data_qt)
print(array_qt)
print(array_qt.ndim,array_qt.shape)
[ 2.   4.   1.2 34.   0. ]
[[1 3 5 7]
 [2 4 6 8]]
2 (2, 4)
 
### 除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。 

除非显式说明,np.array会尝试为新建的这个数组推断一个较为合适的数据类型。

In [7]:
 
print(array.dtype)  # 数据类型
print(array_qt.dtype)
float64
int32
In [ ]:
 
## zeros和ones可以创建指定长度或维度的全0或全1数组。
## empty可以创建一个没有任何具体值得数组。
In [23]:
 
zero = np.zeros((3,5))  # 创建3*5的二维数组,内容全为0
print(zero)
print("*"*70)
empty = np.empty((2,3,4))  # 随机生成2块,3行,4列数据
print(empty)
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
**********************************************************************
[[[2.62459657e+179 9.80546120e-095 1.74483681e-076 8.31856565e-072]
  [1.03106710e-259 3.15474899e+180 2.38954692e+180 1.46922886e+195]
  [4.82555778e+228 1.27873527e-152 6.20311190e+223 2.68212787e-110]]

 [[7.07381649e+194 6.47522084e+170 2.42775961e-154 2.79660159e-152]
  [1.82159989e+185 1.42853558e+248 1.87725413e-009 2.46008030e-154]
  [4.83245960e+276 1.05146955e-153 6.01334434e-154 4.82595977e+276]]]
In [ ]:
 
## ndarray的数据类型
In [24]:
 
print(np.array([1,2,3],dtype=np.float64))
print(np.array([1,2,3],dtype=np.int32))
[1. 2. 3.]
[1 2 3]
In [25]:
 
print(array[1:3])
[4.  1.2]
 
### 如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。

如果想得到ndarray切片的一份副本而非视图,就要显式地进行复制操作。

 
### 例如:array[1:3].copy() 

例如:array[1:3].copy()

 
## 转置 

转置

In [27]:
 
num = np.random.randn(3,2)
num_t = num.T
num_dot_t = np.dot(num,num_t)
print(num)
print("*"*50)
print(num_t)
print("*"*50)
print(num_dot_t)
[[ 0.66201371 -1.65036193]
 [ 0.36761897  1.23633097]
 [-0.56499644 -0.16034667]]
**************************************************
[[ 0.66201371  0.36761897 -0.56499644]
 [-1.65036193  1.23633097 -0.16034667]]
**************************************************
[[ 3.16195667 -1.79702476 -0.10940536]
 [-1.79702476  1.66365797 -0.40594496]
 [-0.10940536 -0.40594496  0.34493203]]
In [12]:
 
points = np.arange(-5, 5, 0.01)  #创建numpy数组,从-5~5,步长为0.01,共1000个数据
xs, ys = np.meshgrid(points, points)  # np.meshgrid(arg1, arg2)函数接收两个一维数组,返回二维矩阵
import matplotlib.pyplot as plt
z = np.sqrt(xs ** 2 + ys ** 2)
plt.imshow(z, cmap=plt.cm.gray)
plt.colorbar()
plt.title("Image plot of :\n{}".format(z))
print("矩阵乘积:\n{}".format(z))
矩阵乘积:
[[7.07106781 7.06400028 7.05693985 ... 7.04988652 7.05693985 7.06400028]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 ...
 [7.04988652 7.04279774 7.03571603 ... 7.0286414  7.03571603 7.04279774]
 [7.05693985 7.04985815 7.04278354 ... 7.03571603 7.04278354 7.04985815]
 [7.06400028 7.05692568 7.04985815 ... 7.04279774 7.04985815 7.05692568]]
In [15]:
 
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
# 根据cond的值进行选择,如果为True则保留xarr的值,否则保留yarr的值
result = [(x if c else y)for x, y, c in zip(xarr, yarr, cond)]
# 使用where
result_where = np.where(cond, xarr, yarr)
print("基于if:\n{}".format(result))
print("基于where:\n{}".format(result_where))
print("{},{}".format(result[0], result_where[0]))
基于if:
[1.1, 2.2, 1.3, 1.4, 2.5]
基于where:
[1.1 2.2 1.3 1.4 2.5]
1.1,1.1
 
### np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。

np.where 的第二个和第三个参数不必是数组,它们都可以是标量值。

 
### 在数据分析中,where通常用于根据另一个数组而产生一个新的数组。 

在数据分析中,where通常用于根据另一个数组而产生一个新的数组。

In [24]:
 
arr = np.random.randn(4, 4)
# arr_demo = np.random.randn(5, 4)
print(arr)
print("="*60)
arr_new = np.where(arr > 0, 6, -6)  # 正值设置为6负值设置为-6
arr_new_arr = np.where(arr > 0, 6, arr)  # 只将正值设置为6
print("{}\n{}".format(arr_new, arr_new_arr))
[[-1.07154786  0.75732606  1.9794616   0.66978179]
 [-1.04776947  0.65248274 -0.09888813  0.12076266]
 [ 2.70432762  0.05325661  0.78152884 -0.4545642 ]




[-0.66935063 -0.82916227 1.07172145 0.5246802 ]]

[[-6 6 6 6]
[-6 6 -6 6]
[ 6 6 6 -6]
[-6 -6 6 6]]
[[-1.07154786 6. 6. 6. ]
[-1.04776947 6. -0.09888813 6. ]
[ 6. 6. 6. -0.4545642 ]
[-0.66935063 -0.82916227 6. 6. ]]

 
### any,all用于判断array是否全部是True

any,all用于判断array是否全部是True


In [26]:
 
bools = np.array([False, False, True, False])
bool_any = bools.any()
bool_all = bools.all()
print("{}\n{}".format(bool_any, bool_all))
True 
False
 
### unique:唯一化,自带排序

unique:唯一化,自带排序


In [27]:
 
names = np.array(['Bob','Joe','Michial','Bob','Joe','Joe'])
ints = np.array([3, 2, 4, 2, 2, 3, 5, 3])
names_unique = np.unique(names)
ints_unique = np.unique(ints)
print("{}\n{}".format(names_unique,ints_unique))
['Bob' 'Joe' 'Michial'] 
[2 3 4 5]
 
### 判断一个数组中的值在另一个数组中是否存在 

判断一个数组中的值在另一个数组中是否存在


In [28]:
 
values = np.array([3, 4, 2, 3, 1, 2])
if_contains_values = np.in1d(values, [1, 3, 5])
print(if_contains_values)
[ True False False  True  True False] 
In [ ]:
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值