問題タブ [array-broadcasting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arrays - ValueError: 入力配列を形状 (1120,1472,4) から形状 (3000,3000) にブロードキャストできませんでした
私は形が (1120,1472,4) の画像を持っています。これを (3000, 3000, 4) に変更しようとしています。私が書いたコードはこのようなものです。
それは生成します
python - Numpy 配列 __mul__() の代わりに __rmul__() を使用するように乗算を強制するか、ブロードキャストをバイパスします
この質問は、他の __rmul__ をクラスの __mul__ でオーバーライドするで尋ねられた内容に近いですが、これは数値データだけよりも一般的な問題であるという印象を受けています。@
また、それは答えられておらず、この操作に行列乗算を使用したくありません。したがって、質問です。
スカラーと数値配列の乗算を受け入れるオブジェクトがあります。いつものように、左の乗算はmyobj()
メソッドが使用されているため問題なく動作しますが、右の乗算では、NumPy はブロードキャスト ルールを使用し、要素ごとの結果を で返しますdtype=object
。
これには、配列のサイズに互換性があるかどうかを確認できないという副作用もあります。
したがって、質問は
__rmul__()
要素ごとにブロードキャストして実行する代わりに、他のオブジェクトのを探すように numpy 配列を強制する方法はあり__mul__()
ますか?
私の特定のケースでは、オブジェクトは MIMO (多入力多出力) 伝達関数行列 (または必要に応じてフィルター係数行列) であるため、行列の乗算は、線形システムの加算と乗算に関して特別な意味を持ちます。したがって、各エントリには SISO システムがあります。
これらの定義では、次のコマンドは望ましくない動作を示します。
numpy - nan を含む配列の行の 25 パーセンタイルまでの平均
各行の nan 値の数が異なる 2 次元配列 x があります。
この配列を使用して、行ごとに、最初の 25 パーセンタイル内のすべての値の平均を計算したいと考えています。私は次のことをしています:
しかし、これは間違った結果をもたらしています - 具体的には、カウント (np.nansum/np.nanmean) は、選択したパーセンタイルに関係なく同じままです。これは、比較が真でない場合にゼロを生成し、平均の有効な値としてカウントされるためです。x[x>limit[:,None]]
1D配列が得られ、2D結果が必要なため、単純に使用できません。
私は次のようにして解決しました:
これに対するより良いアプローチはありますか?
python - ベクトル化されたスライディング ウィンドウのスライスで関数を呼び出す方法は?
オブジェクト検出のためにスライディング ウィンドウ検索をベクトル化しようとしています。これまでのところ、numpy ブロードキャストを使用して、メイン イメージをウィンドウ サイズのスライスにスライスし、all_windows
以下に示す変数に保存することができました。実際の値が一致することを確認したので、そこまでは満足しています。
次の部分は私が困っているところです。同様にベクトル化された形式で各ウィンドウを関数に渡すことができるようにall_windows
、関数を呼び出すときに配列にインデックスを付けたいと思います。patchCleanNPredict()
([0,0]、[1,0]、[2,0]...) などの 2 次元配列にスライス インデックスを含む new_indx という配列を作成しようとしましたが、問題が発生しました。
各ウィンドウの信頼値の配列で終わることを望んでいます。以下のコードは、python 3.5 で動作します。ヘルプ/アドバイスをお寄せいただきありがとうございます。
python - リストから数値を減算しても TypeError が発生しない
私が行った場合
私は得るTypeError: unsupported operand type(s) for -: 'list' and 'int'
ただし、 で構成されたリストb
がnp.float64
あり、次のコードが機能します。
b
これは、 の数字がでありnp.float64
、 にb
多少キャストされているためだと思いますnp.array
。その後、ブロードキャストが発生します。リスト内のすべての要素が同じ型である必要はないためb[0]
、 string だったらどうなるでしょうか? のオペランド b - b[-1]
は依然としてlist
andだったはずなのに、np.float64
なぜ がb - b[-1]
発生しないのTypeError
ですか?
EDITlist
:とnp.array
は違うと答えた人がいます。まあ、私は知っています。しかし、ありb
ませんnp.array
。のように動作list
していますが、コード スニペットで述べたように、その型はです。
の最小限の作業例を次に示しb
ます。
python - Numpy 配列の非ブロードキャスト
大規模なコード ベースでは、np.broadcast_to
配列をブロードキャストするために使用しています (ここでは単純な例を使用しています)。
コードの他の場所では、Numpy 配列に対してベクトル化された方法で操作できるが、ufunc ではないサードパーティ関数を使用しています。これらの関数はブロードキャストを理解していません。つまり、配列のような関数を呼び出すのy
は非効率的です。Numpy のようなソリューションは、ブロードキャストを理解している一方で、配列要素にループvectorize
を導入し、非常に非効率的であるため、良くありません。for
理想的には、私ができるようにしたいのは、unbroadcast
必要に応じてフルサイズにブロードキャストできる最小形状の配列を返す、たとえば と呼ぶことができる関数を持つことです。例えば:
次に、サードパーティ関数を で実行しz
、結果を にブロードキャストしy.shape
ます。
unbroadcast
Numpy のパブリック API に依存する実装方法はありますか? そうでない場合、望ましい結果を生み出すハックはありますか?
python - numpy で (N,) および (N,1) 配列をブロードキャストする
最近、numpy を使用したブロードキャストで次の問題に遭遇しました。
これがhttps://docs.scipy.org/doc/numpy/user/basics.broadcasting.htmlのルールに従っていることは理解していますが、予想に反して直観的ではないようです-結果は(100,1) ベクトル。
私はちょうど疑問に思っていました-この動作には正当な理由がありますか(つまり、これは望ましい動作です)-それとも、ブロードキャストルールが定義されている方法の副産物にすぎません。