dポイントプレゼントキャンペーン実施中!

Q1)下記のコードで、a=2*vvでエラーになります。
このエラーにならない正しいコードをお教え頂けますと大変有難いです。
def aaa1():
def myfunc(a, b):
return a+b
vfunc=np.vectorize(myfunc)
vv=vfunc("123","456")
a=2*vv #<--エラー
#numpy.core._exceptions._UFuncNoLoopError:

以上、宜しくお願いします。

A 回答 (4件)

>①ndarrayの要素型を最初からobject型にする。


vv=np.array(vfunc("123","456"), dtype=object)
>②ndarrayの要素型をobject型に変換してから演算する。
a=2*vv.asType(object)
    • good
    • 0
この回答へのお礼

お世話になります。
明快な回答有難う御座いました。
勉強します
感謝!!!!!

お礼日時:2022/12/22 13:58

>私の質問は、下記のエラーの無くする様なコードに


>関する質問です。
>a=2*vv #<--エラー

はて?何を答えたらよいのでしょう?

ndarrayの既定の文学列型は整数と掛け算
出来ないのでエラーになるのは当然。
これ、numpyではあるあるで
そこいらじゅうで解説されてます。

ndarray中に文字列で演算したいなら
①ndarrayの要素型を最初からobject型にする。
②ndarrayの要素型をobject型に変換してから演算する。

しかありません。

質問のコードがどういう目的のものなのか
質問には何も書かれていないので
答えられるのはここまでです。
    • good
    • 0
この回答へのお礼

もし出来れば、下記の1,2についてお手数でなければ、
回答頂ければ有難いです。
①ndarrayの要素型を最初からobject型にする。
②ndarrayの要素型をobject型に変換してから演算する。
以上、宜しくお願いします。

お礼日時:2022/12/22 07:47

> vv=vfunc("123","456")


> #a=2*int(vv)
> a=vv.astype(object)*2
> print(f"a={a}")
> #a=123456123456 <--出力===

動きとしては
("123"+"456") * 2
と同じです。型がndarrayなだけ。

正しい動きだと思いますが
あなたの想定は?
    • good
    • 0
この回答へのお礼

貴方の回答は正しいと思います
私の質問は、下記のエラーの無くする様なコードに
関する質問です。
a=2*vv #<--エラー

お礼日時:2022/12/21 07:33

vectorize した関数で スカラーを処理すると


ゼロ次元の ndarray になるはず。
値は多分 <U6 型だが 整数との掛け算はサポートしてない。
#pythonの文字列と ndarrayの文字列は別物

無理やりやるなら Python型に変換して
vv.astype(object)*2
かな。多分。
    • good
    • 0
この回答へのお礼

お世話になります。
下記の出力を得ました
def aaa1x():
def myfunc(a, b):
return a+b
vfunc=np.vectorize(myfunc)
vv=vfunc("123","456")
#a=2*int(vv)
a=vv.astype(object)*2
print(f"a={a}")
#a=123456123456 <--出力===
aaa1x(); sys.exit()
以上、宜しくお願いします。

お礼日時:2022/12/20 08:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!