nonzeros解析與實例

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),)

'''



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章