Как отфильтровать нежелательные значения в массивах для построения графиков? ValueError в matplotlib с использованием массивов numpy - PullRequest
2 голосов
/ 11 апреля 2019

Я работаю над новой подпрограммой в некоторых кодах на основе ООП и столкнулся с проблемой при изменении массива данных (краткий пример кода приведен ниже).

По сути, эта подпрограмма предназначена длявзять массив R , транспонировать его, затем отсортировать, а затем отфильтровать данные ниже предварительно определенного значения thres .Затем я переставляю этот массив обратно в его исходное измерение и затем строю каждую из его строк с первым элементом T .

import numpy as np
import matplotlib.pyplot as plt

R = np.random.rand(3,8)
R = R.transpose() # transpose the random matrix
R = R[R[:,0].argsort()] # sort this matrix
print(R)

T = ([i for i in np.arange(1,9,1.0)],"temps (min)")

thres = float(input("Define the threshold of coherence: "))

if thres >= 0.0 and thres <= 1.0 :
        R = R[R[:, 0] >= thres] # how to filter unwanted values? changing to NaN / zeros ?
else :
        print("The coherence value is absurd or you're not giving a number!")

print("The final results are ")
print(R)
print(R.transpose())
R.transpose() # re-transpose this matrix

ax = plt.subplot2grid( (4,1),(0,0) )
ax.plot(T[0],R[0])
ax.set_ylabel('Coherence')

ax = plt.subplot2grid( (4,1),(1,0) )
ax.plot(T[0],R[1],'.')
ax.set_ylabel('Back-azimuth')

ax = plt.subplot2grid( (4,1),(2,0) )
ax.plot(T[0],R[2],'.')
ax.set_ylabel('Velocity\nkm/s')
ax.set_xlabel('Time (min)')

Однако я сталкиваюсь с ошибкой

ValueError: x and y must have same first dimension, but have shapes (8,) and (3,)

Я комментирую ту часть, в которой, как мне кажется, может быть проблема ( как отфильтровать нежелательные значения? ), но тогда остается вопрос.

Как я могупостроите эти два массива ( R и T ), сохраняя возможность отфильтровывать нежелательные значения ниже thres ?Могу ли я преобразовать эти нежелательные значения в ноль или NaN и затем успешно построить их?Если да, как я могу это сделать?

Ваша помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 11 апреля 2019

С помощью технического друга проблему просто разрешают, сохранив эту часть

R = R[R[:, 0] >= thres]

потому что удаление нежелательных элементов предпочтительнее, чем их изменение на NaN или ноль. И тогда проблема с прорисовкой решена добавлением небольшой модификации в этой части

ax.plot(T[0][:len(R[0])],R[0])

, а также для последующей детализации. Это нарезает T в том же измерении, что и R .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...