質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1212閲覧

xとyの変数の要素数が違う

45_75_o.o

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2023/07/27 09:18

編集2023/07/28 09:14

実現したいこと

ここに実現したいことを箇条書きで書いてください。
オシロスコープのデータをとってくる
オシロスコープにて抽出したデータをプロットする
プロットした縦軸は電圧、横軸は時間

前提

ここに質問の内容を詳しく書いてください。
・jupyter notebook にてオシロスコープを用いて測定したい
・条件としては電圧は10数V
・周波数は13MHzから18MHzほどのものを測定したい
数十MHzということなので、横軸を1メモリ100ns等に変えようと思っていたのですが
突然x、yの変数の型が違うというエラーメッセージがでできた

発生している問題・エラーメッセージ


ValueError Traceback (most recent call last)
Cell In[11], line 69
63 plt.pause(.01)
68 if name == "main":
---> 69 main()

Cell In[11], line 45, in main()
42 ax.set_xlabel('time(μs)')
43 ax.set_ylabel('Voltage(mV)')
---> 45 lines, = ax.plot(x, y)
47 while True:
49 manager = _pylab_helpers.Gcf.get_active()

File ~\anaconda3\lib\site-packages\matplotlib\axes_axes.py:1688, in Axes.plot(self, scalex, scaley, data, *args, **kwargs)
1445 """
1446 Plot y versus x as lines and/or markers.
1447
(...)
1685 ('green') or hex strings ('#008000').
1686 """
1687 kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D)
-> 1688 lines = [*self._get_lines(*args, data=data, **kwargs)]
1689 for line in lines:
1690 self.add_line(line)

File ~\anaconda3\lib\site-packages\matplotlib\axes_base.py:311, in _process_plot_var_args.call(self, data, *args, **kwargs)
309 this += args[0],
310 args = args[1:]
--> 311 yield from self._plot_args(
312 this, kwargs, ambiguous_fmt_datakey=ambiguous_fmt_datakey)

File ~\anaconda3\lib\site-packages\matplotlib\axes_base.py:504, in _process_plot_var_args._plot_args(self, tup, kwargs, return_kwargs, ambiguous_fmt_datakey)
501 self.axes.yaxis.update_units(y)
503 if x.shape[0] != y.shape[0]:
--> 504 raise ValueError(f"x and y must have same first dimension, but "
505 f"have shapes {x.shape} and {y.shape}")
506 if x.ndim > 2 or y.ndim > 2:
507 raise ValueError(f"x and y can be no greater than 2D, but have "
508 f"shapes {x.shape} and {y.shape}")

ValueError: x and y must have same first dimension, but have shapes (101,) and (100,)

該当のソースコード

python

def get_data_from_inst(rm , osc): osc.timeout = 30000 # Setting source as Channel 1 osc.write('DATA:SOU CH1') osc.write('DATA:WIDTH 1') osc.write('DATA:ENC ASCI') osc.write('DATA:RESOLUTION FULL') # Getting axis info ymult = float(osc.query('WFMPRE:YMULT?')) # y-axis least count yzero = float(osc.query('WFMPRE:YZERO?')) # y-axis zero error yoff = float(osc.query('WFMPRE:YOFF?')) # y-axis offset xincr = float(osc.query('WFMPRE:XINCR?')) # x-axis least count xoff = float(osc.query('WFMP:PT_OFF?')) # x-axis offset xzero = float(osc.query('WFMPRE:XZERO?')) # x-axis least count ADC_wave = osc.query_ascii_values('CURV?', container=np.array) Volts = (ADC_wave- yoff) * ymult + yzero Time = np.arange(xzero,len(Volts)*xincr + xzero, xincr) return (Time, Volts) def main(): rm = pyvisa.ResourceManager() osc = rm.open_resource(rm.list_resources()[0]) data = get_data_from_inst(rm, osc) x, y = data x = x * 1e6 # sec to micro sec y = y * 1e3 # V to mV fig, ax = plt.subplots(1, 1) ax.set_xlabel('time(μs)') ax.set_ylabel('Voltage(mV)') lines, = ax.plot(x, y) while True: manager = _pylab_helpers.Gcf.get_active() if manager is None: break # plot データの更新 data = get_data_from_inst(rm, osc) x, y = data x = x * 1e6 # sec to micro sec y = y * 1e3 # V to mV # data update lines.set_data(x, y) plt.pause(.01) if __name__ == "__main__": main()

試したこと

Time = np.arange(xzero, xincr * (len(Volts) - xoff) + xzero, xincr)から
Time = np.arange(xzero,len(Volts)*xincr + xzero, xincr)に変更しました

補足情報(FW/ツールのバージョン

オシロスコープにはTEKTRONIX,DPO3014,C021244,CF:91.1CT FV:v2.38
これを用いています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

68user

2023/07/27 10:13

見づらいのでソースとエラーメッセージを「コードの挿入」を使って見やすくしてください。 で、x と y の要素数が違うと言ってるんじゃないですかね。
meg_

2023/07/27 10:20

> 突然x、yの変数の型が違うというエラーメッセージがでできた 上記のエラーメッセージを質問に追記お願いします。
y_waiwai

2023/07/27 11:13

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
jbpb0

2023/07/27 11:32

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
jbpb0

2023/07/27 11:37

> x、yの変数の型が違うというエラーメッセージ > ValueError: x and y must have same first dimension, but have shapes (101,) and (100,) 違うのは、(68userさんも書いてるように)「型」じゃなくて「要素数」(データ数)ですよ
45_75_o.o

2023/07/28 07:04

コードを変更させていただきました 丁寧に教えていただきありがとうございます
guest

回答2

0

float(浮動小数点)で numpy.arange() を使うと、丸め誤差の影響で、最後の値が終点の値より小さくなってしまい範囲に含まれてしまうケースが出てきます。
なので、numpy.arange() は整数で使うのが安全です。

python

1Time = xzero + np.arange(len(Volts)) * xincr

参考: https://tam5917.hatenablog.com/entry/2021/02/11/200006

投稿2023/07/29 00:01

編集2023/07/29 00:45
bsdfan

総合スコア4899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず,

python

1def get_data_from_inst(rm , osc): 2 osc.timeout = 30000 3 # Setting source as Channel 1 4 osc.write('DATA:SOU CH1') 5 osc.write('DATA:WIDTH 1') 6 osc.write('DATA:ENC ASCI') 7 osc.write('DATA:RESOLUTION FULL') 8 9 # Getting axis info 10 ymult = float(osc.query('WFMPRE:YMULT?')) # y-axis least count 11 yzero = float(osc.query('WFMPRE:YZERO?')) # y-axis zero error 12 yoff = float(osc.query('WFMPRE:YOFF?')) # y-axis offset 13 xincr = float(osc.query('WFMPRE:XINCR?')) # x-axis least count 14 xoff = float(osc.query('WFMP:PT_OFF?')) # x-axis offset 15 xzero = float(osc.query('WFMPRE:XZERO?')) # x-axis least count 16 17 ADC_wave = osc.query_ascii_values('CURV?', container=np.array) 18 Volts = (ADC_wave- yoff) * ymult + yzero 19 Time = np.arange(xzero,(len(Volts) - xoff)*xincr + xzero, xincr) 20 return (Time, Volts) 21

Time = np.arange(xzero,(len(Volts) - xoff)*xincr + xzero, xincr)

Time = np.arange(xzero,len(Volts) * xincr + xzero, xincr)

に変えればエラーはなくなると思います。

xoff = float(osc.query('WFMP:PT_OFF?')) # x-axis offset

のクエリが他と明らかに違う(バグ?)のでxoff-1が入って
TimeVoltsの要素数が1だけ違うのだと思います。

その他色々デバッグは必要だと思いますが,そこはオシロスコープのマニュアル等見て頑張って下さい。

(おそらくshape → かたち →(誤解)→ かた → 型と思われたのではないかと)

投稿2023/07/27 11:57

ujimushi_sradjp

総合スコア2179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

45_75_o.o

2023/07/28 05:04

xoff Time に関して修正しましたが エラーは治りませんでした 確認お願いします
jbpb0

2023/07/28 07:40

> エラーは治りませんでした エラーメッセージは質問に記載のと全く同じでしょうか?
45_75_o.o

2023/07/28 09:15

はい、先ほどのものとかわりませんでした
ujimushi_sradjp

2023/07/28 11:50

ん~,すごく期待されているようなのですが,これ以上の回答は私からはありませんよ。 私のプロフィールの「続きを読む」を見てもらったら分かるのですが,基本的にコメントをやり取りしながら問題を明らかにして回答することを私はしません。 だって平日昼間は仕事だし,土日は子供のご飯の用意や洗濯とか家事とかあっていつ回答できるか分かりませんから。 今日は深夜から推しのJulia言語のイベントJuliaCon 2023を見る方が大事ですし。 他の人に回答して欲しいのであれば,まずはMarkdawnの機能を使って正しくソースリストを提示することです。 Pythonは言語仕様的にスペースを使ったインデントが正しくなければ文法的に間違っていると判断されます。 (私の推しのJulia言語ではそういうことはありませんが) この質問の性質上,回答を得られることは難しいです。 回答が得られやすいのは,回答者の手持ちの環境で実行できるもので,それなら回答者側で試行錯誤ができるのですが, オシロスコープのライブラリを使っているので,回答者側では全然そういうことができません。 かといって,この質問にはそれに関する情報の提示が皆無です。これでは答えようがありません。 私がこの質問に回答したのはたとえソースが正しく表示されていても「これだけの情報ではこれしか回答しようがない」と思ったからなので,うまくいかなくてもこれ以上はどうしようもないというのが私の正直な気持ちです。回答能力が無くて申し訳ない。 私がもし質問者の立場なら,(昔かたぎなのでデバッガとか使わず)最初から関数化せず,Replの環境とかで1ステップ1ステップ実行させて どんな値が返ってきているか,型(Type)は何かを一つーつ確認しながら進めていって, うまくいきそうなら,Replうまくいった部分をつなぎ合わせて関数化する,といった地道な作業をしますね。 これに関してどうするかは質問者次第ですが,いづれにせよ私がこの質問に対して回答することは二度とありません。回答能力(マイスキルはすべて「Eランク」)も時間的余裕も不足で申し訳ないです。 最後にプログラマ的な立場からいうと,質問にコメントをした人の意見の方が正しい反応であって, この質問の内容でいい加減に答える私のような人間の方がおかしいと思います。念のため。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問