Как сделать многомерный массив с переменным размером строки?

Основная проблема заключается в том, что

g(getx()); //error

является логической ошибкой: g модифицирует результат getx(), но вы не имеете возможности исследовать измененный объект. Если g не нужно было изменять свой параметр, тогда он не требовал бы ссылки lvalue, он мог бы взять параметр по значению или по ссылке const.

const X& x = getx(); // OK

действителен, потому что вы иногда нужно повторно использовать результат выражения, и довольно ясно, что вы имеете дело с временным объектом.

Однако невозможно сделать

X& x = getx(); // error

действительным без делая g(getx()) действительным, что и пытались избежать в первую очередь разработчиками языка.

g(getx().ref()); //OK

справедливо, поскольку методы знают только о константе this, они не не знаю, вызваны ли они lvalue или rvalue.

Как всегда в C ++ у вас есть обходное правило для этого правила, но вы должны сообщить компилятору, что знаете, что вы делаете, будучи явным:

g(const_cast<x&>(getX()));
38
задан feedMe 4 January 2019 в 11:49
поделиться

2 ответа

Хотя Numpy умеет работать с массивами произвольных объектов, он оптимизирован для однородных массивов чисел с фиксированной размерностью. Если вам действительно нужны массивы массивов, лучше использовать вложенный список. Но в зависимости от предполагаемого использования ваших данных, различные структуры данных могут быть даже лучше, например, маскированный массив, если у вас есть некоторые недостоверные точки данных.

Если вам действительно нужны гибкие массивы Numpy, используйте что-то вроде этого:

numpy.array([[0,1,2,3], [2,3,4]], dtype=object)

Однако это создаст одномерный массив, хранящий ссылки на списки, что означает, что вы потеряете большинство преимуществ Numpy (векторная обработка, локальность, нарезка и т.д.).

25
ответ дан 26 November 2019 в 23:48
поделиться

Это плохо поддерживается в Numpy (по определению почти везде «двумерный массив» имеет все строки одинаковой длины). Список Python массивов Numpy может быть для вас хорошим решением, так как таким образом вы получите преимущества Numpy там, где вы можете их использовать:

cells = [numpy.array(a) for a in [[0,1,2,3], [2,3,4]]]
13
ответ дан 26 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: