私はユニットフル単位のベクトルu
と番号t
を持っています。du
の単位はtypeof(oneunit(u)/oneunit(t))
です。私は入力に一致するSArray
またはMArray
出力を構成するコードの単一の一般的な行を探したいと思います。私が試したいくつかのケースがあります:変更されたユニットでどのようにSArray/MArrayを作成しますか?
- 明らかに
copy(u)
は、このユニットに一致しません。 u/oneunit(t)
およびu./oneunit(t)
は、いずれもu <: MArray
であっても、SArray
を作成します。 、similar
は常に可変タイプを作成し、それは常にMArray
は私が直接それがなければ一般的なコードに奇妙な枝を追加しますので、痛みになりコンストラクタを(使用する必要があります作成されますが、それが答えであれば問題ありません)?簡単な変換がsimilar
ながらMArray
の
u = @MArray [1u"g",2u"g",3u"g"]
t = 1u"s"
convert(typeof(u),u/t)
DimensionError: g and 1.0 g s^-1 are not dimensionally compatible.
では動作しないこと
編集
例は絶望的である:
u = @SArray [1u"g",2u"g",3u"g"]
similar(u)
3-element MVector{3,Quantity{Int64, Dimensions:{}, Units:{g}}}:
72559480 g
581132080 g
29791 g
ユーザーが特定の理由でタイプを選択しているため、そのことを尊重する必要があるため、これは機能しません。実際の問題は、型が 'SArray {SArray}'か 'MArray {SArray}'であることです。型の変更はどちらの方法でも、型が不変から可変に無作為に変更されたり、その逆に変更されたりすることがないため、アルゴリズムが中断されます。 –
単純な 'convert'が動作しないことを示すためにOPを更新しました。たぶん、パラメータなしで型を引っ張るために必要な、より洗練されたバージョンがあります。 –