したいこと
if文を含む以下の関数をndarrayにfor文を使わずに適用したいです。
python
1def to3dim(x): 2 zeros = np.zeros_like(x) 3 if x[0] - x[-1] <= 0: 4 y = np.dstack((x, zeros)).transpose((2, 0, 1)) 5 else: 6 y = np.dstack((zeros, x)).transpose((2, 0, 1)) 7 return y
適用したいndarrayの形状は(n, 4)です。それを(2, n, 4)としたいです。
[[0, 1, 2, 3], [7, 6, 5, 4]] を [[[0, 1, 2, 3], [0, 0, 0, 0]], [[0, 0, 0, 0], [7, 6, 5, 4]]] のようにする。
frompyfuncやvectorizeをただ適用しただけではエラーが出てしまいました。
どうすればよいでしょうか。お力添えお願いします。
> x[0] - x[-1] <= 0
は、(1行目 - n行目) のベクトルの"すべて"の値が0以下という意図でしょうか?
いえ、各行の要素のつもりです。
もしかしてこれだと行単位で考えていますか?
print(x[0] - x[-1] <= 0) # [ True True True True]
となります。
[[0, 1, 2, 3],
[7, 6, 5, 4]]
からどのような規則で以下の出力が導出されたのかが質問のコードからは推察できないため、回答できません。
[[[0, 1, 2, 3],
[0, 0, 0, 0]],
[[0, 0, 0, 0],
[7, 6, 5, 4]]]
文章で入力から出力が作られる過程を書いてください。
それがわかれば、numpy でのコードを提示できます。
x[0] と x[-1] のどちらが大きいかでdstackの引数の順番が変わる、というコードです。
例えばx = [0, 1, 2, 3] は x[0] < x[-1] なのでnp.dstack((x, zeros))、
x = [7, 6, 5, 4] は x[0] < x[-1] なのでnp.dstack((zeros, x))、という感じです。
回答1件
あなたの回答
tips
プレビュー