GVKun编程网logo

如何删除numpy.array中的列(numpy array删除元素)

33

在本文中,我们将带你了解如何删除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删除元素)

我想删除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 中的运算

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的区别

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数据操作

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

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的相关知识,请在本站寻找。

本文标签: