from numpy import *
data = [[1,2,5,6],
[4,8,5,9],
[8,7,4,2],
[6,8,4,9],
[8,2,1,6],
[1,2,5,6],
[4,8,5,9]]
index = [[1,55],
[1,48],
[2,59],
[3,56],
[2,74],
[1,46],
[3,99]]
data = mat(data)
index = mat(index) #必須是矩陣的形式,不然上邊都是列表
print(index[:,0] == 1)
print(nonzero(index[:,0] == 1))
print(data[nonzero(index[:,0] == 1)])
# [[ True]
# [ True]
# [False]
# [False]
# [False]
# [ True]
# [False]]
# (array([0, 1, 5], dtype=int64), array([0, 0, 0], dtype=int64))
# [[1 4 1]]
#nonzeros返回的是True的下標 但注意是【【】】一層還是兩層
print(data[nonzero(index[:,0] == 1)[0]])
# [[1 2 5 6]
# [4 8 5 9]
# [1 2 5 6]]
#這是返回的兩者的區別
lists = [1,4,8,5,6] lists = array(lists) print(nonzero(lists > 4)[0]) print(nonzero(lists > 4)) # [2 3 4] # (array([2, 3, 4], dtype=int64),)
#數據爲mat時與數據爲array時的返回的區別
data = [[1,2,3],
[2,5,4],
[2,6,9],
[7,4,9]]
data = array(data)
print(data[nonzero(data[:,1] <= 4)[0],:][0])
data = [[1,2,3],
[2,5,4],
[2,6,9],
[7,4,9]]
data = mat(data)
print(data[nonzero(data[:,1] <= 4)[0],:][0])
# [1 2 3]
# [[1 2 3]]
#矩陣和列表的區別 def loadData(): return [[1,1,1,0,0], [2,2,2,0,0], [1,1,1,0,0], [5,5,5,0,0], [1,1,0,2,2], [0,0,0,3,3], [0,0,0,1,1]] #利用numpy中的sVD進行分解 data = mat(loadData()) print(data[0,:].A) #[[1 1 1 0 0]] print(type(data[0,:].A)) #<class 'numpy.ndarray'> print(type(data[0,:].A == 1)) #<class 'numpy.ndarray'> print(type(nonzero(data[0,:].A == 1))) #<class 'tuple'> for i in nonzero(data[0,:].A == 1): print(i) ''' [0 0 0] [0 1 2] ''' data1 = array([1,2,3,1]) print(nonzero(data1 == 1)) #(array([0, 3], dtype=int64),) print(type(nonzero(data1 == 1))) #<class 'tuple'> for j in nonzero(data1 == 1): print(j) #[0 3]
array與mat的區別
data2 = array(loadData()) print(nonzero(data[0,:] == 1)) print(nonzero(data[0,:].A == 1)) print(nonzero(data2[0,:] == 1)) ''' (array([0, 0, 0], dtype=int64), array([0, 1, 2], dtype=int64)) (array([0, 0, 0], dtype=int64), array([0, 1, 2], dtype=int64)) (array([0, 1, 2], dtype=int64),) '''