2013-02-06 53 views
0

我有以下代碼。我有一個矩陣,我想每次取兩行並放入這些函數中。我通過intertools看過,但我不確定他們是否會在這種情況下工作。我嘗試了islice,但它沒有提供我想要的輸出。我知道我必須給'方法'提供位置參數,但是我已經把它們留下了,因爲這些代碼會給出結果,它們只是相同的最小值,最大值等等。我正在嘗試給我的關於索引錯誤的問題,以及對象不能被下載。我是python的新手,我正在通過一些書籍,但他們沒有直接介紹。我查看了一些人在尋找stackoverflow,但他們大多希望一次讀入2行文件,而不是numpy ndarrays。任何建議表示讚賞。在函數中使用numpy ndarray

import numpy as np 

def xmax(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+1:2]) 
     if setOne[i][0:1] > setTwo[i][0:1]: 
      xMax = setOne[i][0:1] 
     else: 
      xMax = setTwo[i][0:1] 
     return(xMax) 

def xmin(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+1:2]) 
     if setOne[i][0:1] < setTwo[i][0:1]: 
      xMin = setOne[i][0:1] 
     else: 
      xMin = setTwo[i][0:1] 
     return(xMin) 

def ymax(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+1:2]) 
     if setOne[i][1:2] > setTwo[i][1:2]: 
      yMax = setOne[i][1:2] 
     else: 
      yMax = setTwo[i][1:2] 
     return(yMax) 

def ymin(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+1:2]) 
     if setOne[i][1:2] < setTwo[i][1:2]: 
      yMin = setOne[i][1:2] 
     else: 
      yMin = setTwo[i][1:2] 
     return(yMin) 

def zmax(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+2:3]) 
     if setOne[i][2:3] > setTwo[i][2:3]: 
      zMax = setOne[i][2:3] 
     else: 
      zMax = setTwo[i][2:3] 
     return(zMax) 

def zmin(): 
    for i in range(1): 
     setOne = (matrix[i:1]) 
     setTwo = (matrix[i+2:3]) 
     if setOne[i][2:3] < setTwo[i][2:3]: 
      zMin = setOne[i][2:3] 
     else: 
      zMin = setTwo[i][2:3] 
     return(zMin) 

'''*********************************************************************************** 
Created on Jan 27, 2013 

@author: 
***********************************************************************************''' 

f ='/Users/Documents/workspace/findMinMax/crapc.txt' 
x,y,z = np.loadtxt(f, unpack=True, usecols=(1,2,3), ndmin = 2) 

maxZ = max(z) 
minZ = min(z) 
print("Maximum Z value: " + str(maxZ)) 
print("Minimum Z value: " + str(minZ)) 
matrix = [x,y,z] 
matrix = np.rot90(matrix) 
matrix = matrix[::-1] 




"""for each_row in range(0,len(matrix)-1,2): 
     print("Xmax:" + str(xmax())) 
     print("Xmin:" + str(xmin())) 
     print("Ymax:" + str(ymax())) 
     print("Ymin:" + str(ymin())) 
     print("Zmax:" + str(zmax())) 
     print("Zmin:" + str(zmin()))""" 
+0

1)你究竟想要達到什麼目的? 2)'範圍(1)'上的循環是什麼 - 它們只包含一個零值。 –

+0

確實不清楚你想要做什麼。如果你想要最小或最大的numpy ndarray,請嘗試使用['min'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.amin.html#numpy.amin)和['max'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.amax.html#numpy.amax)函數,即'numpy.max(z)'或甚至'z。 MAX()'。該文檔顯示瞭如何獲取每列或每行的最大值(使用'axis'關鍵字)。 – Tim

回答

1

這是我不太清楚你在做什麼,我不理解你的代碼的結構(你在這裏提供的是不是一個獨立的例子),但在你的代碼索引是錯了,而不是python/numpy是如何工作的。

vec [a:b]的範圍取自vec的b-a元素(不是b-a + 1!),從索引a開始到索引b-1結束。您似乎認爲它將包含索引b處的元素;它沒有。

+0

我一定會看看numpy.max()的文檔。我嘗試了常規的最大值,但是我相信你知道,它不起作用。找到整列的最小值和最大值的問題是我只想一次找到兩行的最小值和最大值。我的ndarray有31行,我想限制我的代碼只找到最上面兩行的最大值和最小值,然後移動到下兩行(從第二行開始)。例如,我想查找第1行和第2行的最小值和最大值,然後是第2和第3,然後是第3和第4。 – pioneer903

+0

您可以一次對數組進行兩行切片,然後取最大值,如下所示: 'p = np.random.random((31,31)); np.max(P [5:7])' – aestrivex