2010-12-02 21 views
6
शायद

नहीं इस तरह के एक बड़ी बात नहीं है, लेकिन यह मेरे दिल टूट जाता है इस का पालन करने के:क्या मैं एक लूप के बिना एक numpy सरणी साफ कर सकते हैं?

deltas = data[1:] - data[:-1]

इस के साथ

:

for i in range(len(deltas)): 
     if deltas[i] < 0: deltas[i] = 0 
     if deltas[i] > 100: deltas[i] = 0 

इस विशेष उदाहरण के लिए ... वहाँ के लिए एक बेहतर तरीका है सफाई हिस्सा करो?

प्रश्न भाग दो: क्या होगा यदि सफाई नियम अधिक जटिल हैं, या इस उदाहरण से कम जटिल हैं। उदाहरण के लिए, हम सिर्फ सभी नकारात्मक संख्याओं को शून्य में बदलना चाहते हैं। या, हम एक और अधिक जटिल मैपिंग कर रहे हैं।

उत्तर

9
import numpy as np 
deltas=np.diff(data) 
deltas[deltas<0]=0 
deltas[deltas>100]=0 
इसके अलावा

संभव है, और थोड़ा तेज है

deltas[(deltas<0) | (deltas>100)]=0 
+0

डेल्टास में संपादित करें [(डेल्टा <0) | (डेल्टा> 100)] = 0 – Pete

+0

@Pete: अरे, धन्यवाद! – unutbu

1

numpy सरणी के प्रत्येक तत्व के लिए एक समारोह को लागू करने के numpy.vectorize का उपयोग करें।

संबंधित मुद्दे