在本文中,我们将带你了解如何删除numpy.array中的列在这篇文章中,我们将为您详细介绍如何删除numpy.array中的列的方方面面,并解答numpyarray删除元素常见的疑惑,同时我们还将给
在本文中,我们将带你了解如何删除numpy.array中的列在这篇文章中,我们将为您详细介绍如何删除numpy.array中的列的方方面面,并解答numpy array删除元素常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的numpy.array 中的运算、numpy中array和asarray的区别、Numpy中array数据操作、numpy中np.array()与np.asarray的区别以及.tolist。
本文目录一览:- 如何删除numpy.array中的列(numpy array删除元素)
- numpy.array 中的运算
- numpy中array和asarray的区别
- Numpy中array数据操作
- numpy中np.array()与np.asarray的区别以及.tolist
如何删除numpy.array中的列(numpy array删除元素)
我想删除numpy.array中的选定列。这是我的工作:
n [397]: a = array([[ NaN,2.,3.,NaN],.....: [ 1.,9]])
In [398]: print a
[[ NaN 2. 3. NaN]
[ 1. 2. 3. 9.]]
In [399]: z = any(isnan(a),axis=0)
In [400]: print z
[ True False False True]
In [401]: delete(a,z,axis = 1)
Out[401]:
array([[ 3.,[ 3.,9.]])
在此示例中,我的目标是删除所有包含NaN的列。我希望最后一个命令会导致:
array([[2.,3.],[2.,3.]])
我怎样才能做到这一点?
numpy.array 中的运算
简单运算
现在有有个需求,给定一个数组,让数组中每一个数乘以 2,怎么做呢
n = 10
L = [i for i in range(n)]
L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 * L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A = []
for e in L:
A.append(2*e)
A # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
L = np.arange(n)
2 * L
# array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
各种写法性能比较
n = 1000000
L = [i for i in range(n)]
%%time
A = []
for e in L:
A.append(2*e)
"""
CPU times: user 253 ms, sys: 30 ms, total: 283 ms
Wall time: 303 ms
"""
%%time
A = [2*e for e in L]
"""
CPU times: user 93.6 ms, sys: 25.8 ms, total: 119 ms
Wall time: 128 ms
"""
L = np.arange(n)
%%time
A = np.array(2*e for e in L)
"""
CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms
Wall time: 24.8 ms
"""
%%time
A = 2 * L
"""
CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms
Wall time: 24.8 ms
"""
NumPy’s UFuncs (Universal Functions)
全称通用函数(universal function),是一种能够对数组中所有元素进行操作的函数
- 四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**):数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同
- 比较运算:>、<、==、>=、<=、!= :比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。
- 逻辑运算:np.any 函数表示逻辑 “or”,np.all 函数表示逻辑 “and” :运算结果返回布尔值
X = np.arange(1, 16).reshape((3, 5))
"""
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
"""
# 每个元素 + 1
X + 1
# 每个元素 - 1
X - 1
# 每个元素 * 2
X * 2
# 每个元素 / 2
X / 2
# 每个元素的平方
X ** 2
# 求余
X % 2
# 倒数
1 / X
还有下面等一系列方法
np.abs(X)
np.sin(X)
np.cos(X)
np.tan(X)
np.arctan(X)
np.exp(X)
np.exp2(X)
np.power(3, X)
np.log(X)
np.log2(X)
np.log10(X)
矩阵间运算
A = np.arange(4).reshape(2, 2)
B = np.full((2, 2), 10)
A + B
A - B
# ×乘,每个对应位置相乘
A * B
# .乘,C11 = A的第一行*B的第一列,先乘后加
A.dot(B)
# 转置
A.T
# 返回自身的共轭转置
A.H
# 返回自身的逆矩阵
A.I
# 返回自身数据的2维数组的一个视图
A.A
向量和矩阵的运算
加法
A = np.arange(4).reshape(2, 2)
v = np.array([1, 2])
v + A
"""
array([[1, 3],
[3, 5]])
"""
乘法
v * A
"""
array([[0, 2],
[2, 6]])
"""
v.dot(A) # array([4, 7])
A.dot(v) # array([2, 8])
矩阵的逆与伪逆
矩阵的逆
B = np.linalg.inv(A)
A.dot(B)
"""
array([[1., 0.],
[0., 1.]])
"""
矩阵的伪逆
X = np.arange(16).reshape((2, 8))
pinvX = np.linalg.pinv(X)
X.dot(pinvX)
"""
array([[ 1.00000000e+00, -2.77555756e-16],
[ 1.69309011e-15, 1.00000000e+00]])
"""
矩阵的伪逆又被称为 “广义逆矩阵”
Numpy 中 arg 运算
x = np.random.normal(0, 1, 1000000)
np.argmin(x) #获取最小值的下标
np.argmax(x)
numpy中array和asarray的区别
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
举例说明:
输入:
import numpy as np
#example 1:
data1=[[1,1,1],[1,1,1],[1,1,1]]
arr2=np.array(data1)
arr3=np.asarray(data1)
data1[1][1]=2
print ''data1:\n'',data1
print ''arr2:\n'',arr2
print ''arr3:\n'',arr3
输出:
data1:
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
arr2:
[[1 1 1]
[1 1 1]
[1 1 1]]
arr3:
[[1 1 1]
[1 1 1]
[1 1 1]]
结论:面对元组数据结构,array和asarray没有区别,都对元数据进行了复制并转化为ndarray。
输入:
import numpy as np
#example 2:
arr1=np.ones((3,3))
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr1[1]=2
print ''arr1:\n'',arr1
print ''arr2:\n'',arr2
print ''arr3:\n'',arr3
输出:
arr1:
[[ 1. 1. 1.]
[ 2. 2. 2.]
[ 1. 1. 1.]]
arr2:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
arr3:
[[ 1. 1. 1.]
[ 2. 2. 2.]
[ 1. 1. 1.]]
结论:当数据源是ndarray时,array会copy出一个副本,占用新的内存,但asarray不会。
Numpy中array数据操作
1、创建:
1 import numpy as np
2 arr=np.array([1,2,3])
3 print(arr,arr.ndim)
1 list=[1,2,3]
2 arr=np.array(list)
2、增加
1 arr=numpy.array([1,2,3])
2 #arr中新增数据元素4
3 ad=numpy.array([4])
4 print(arr.ndim)
5 arr.resize(len(arr),1)
6
7 arr_ad=np.vstack((arr,ad))
8 print(arr_ad)
9 arr_re=arr_ad.reszie(1,len(arr_ad))
10 print(arr_re)
3、删除
1 arr=np.array([1,2,3,4])
2 #删除arr中元素4
3 arr_de=np.delete(arr,3,axis=0)
4 print(arr_de)
5
6 arr1=np.array([[1,2],[3],[4,5]])
7 #删除arr1中第一元素的2:方法1
8 arr1[0]=[1]
9 print(arr1)
10 #方法2
11 del arr1[0][1]
12 print(arr1)
4、查找(索引)
1 arr=np.array([1,2,3,4])
2
3 for i in arr:
4
5 print(i)
6
7 arr[:2]
8
9 arr[-2:]
10
11 arr[1:2]
12
13 arr=np.array([[1,2,3],[4,5,6]])
14
15 arr[0][0]
numpy中np.array()与np.asarray的区别以及.tolist
array 和 asarray 都可以将 结构数据 转化为 ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
1.输入为列表时
import numpy as np
a=[[1,2,3],[4,5,6],[7,8,9]]
b=np.array(a)
c=np.asarray(a)
a[2]=1
print(a)
print(b)
print(c)
"""
运行结果:
[[1, 2, 3], [4, 5, 6], 1]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]
"""
从中我们可以看出np.array与np.asarray功能是一样的,都是将输入转为矩阵格式。当输入是列表的时候,更改列表的值并不会影响转化为矩阵的值。
2.输入为数组时
import numpy as np
a=np.random.random((3,3))
print(a.dtype)
b=np.array(a,dtype=''float64'')
c=np.asarray(a,dtype=''float64'')
a[2]=2
print(a)
print(b)
print(c)
"""
运行结果:
float64
[[0.11294711 0.0957448 0.78717227]
[0.69908742 0.78219365 0.34341174]
[2. 2. 2. ]]
[[0.11294711 0.0957448 0.78717227]
[0.69908742 0.78219365 0.34341174]
[0.82900099 0.68317933 0.99346798]]
[[0.11294711 0.0957448 0.78717227]
[0.69908742 0.78219365 0.34341174]
[2. 2. 2. ]]
"""
从上述结果我们可以看出np.array与np.asarray的区别,其在于输入为数组时,np.array是将输入copy过去而np.asarray是将输入cut过去,所以随着输入的改变np.array的输出不变,而np.asarray的输出在变化,
!!!并且当我们使用np.asarray改变其类型的时候(输入是float64,改为float32),这样当输入改变的时候,np.asarray的输出也不会改变。
3.array类型转为list类型
import numpy as np
a=np.random.random((3,3)).round(2)
print(a.dtype)
print(a)
b=a.tolist()
print("---"*20)
a[1]=2
print(a)
print(b)
"""
运行结果:
float64
[[0.29 0.89 0.93]
[0.83 0.88 0.49]
[0.21 0.48 0.5 ]]
------------------------------------------------------------
[[0.29 0.89 0.93]
[2. 2. 2. ]
[0.21 0.48 0.5 ]]
[[0.29, 0.89, 0.93], [0.83, 0.88, 0.49], [0.21, 0.48, 0.5]]
"""
从上述我们可以看到.tolist是将数组转为list的格式,等同于np.array的反向,那什么情况下需要将np.ndarray转为list的格式呢?当需要序列化的时候(serialization),由于np.ndarray是不可序列化的。
关于如何删除numpy.array中的列和numpy array删除元素的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于numpy.array 中的运算、numpy中array和asarray的区别、Numpy中array数据操作、numpy中np.array()与np.asarray的区别以及.tolist的相关知识,请在本站寻找。
本文标签: