Входной массив равен x с размерами (1 x 3), а выходной массив равен 3 x 3 (столбец ввода x столбец ввода). Диагонали выходного массива — это значения^2. Если строка != столбец, то для каждого значения используется формула x(строка)+x(столбец). В настоящее время для 1 x 3, но в качестве входных данных следует использовать различные размеры. Невозможно использовать 'def'. Текущий код не работает, что посоветуете?
x = np.array([[0, 5, 10]])
output array formulas =
[[i^2, x(row)+x(col), x(row)+x(col)]
[x(row)+x(col), i^2, x(row)+x(col)]
[x(row)+x(col), x(row)+x(col), i^2]]
# where row and column refer to the output matrix row, column. For example, the value in (1,2) is x(1)+x(2)= 5
ideal output =
[[0 5 10]
[5 25 15]
[10 15 100]]
Попытка кода:
x = np.array([[0, 5, 10]])
r, c = np.shape(x)
results = np.zeros((c, c))
g[range(c), range(c)] = x**2
for i in x:
for j in i:
results[i,j] = x[i]+x[j]
3 ответа
Научитесь использовать методы numpy и вещание:
>>> x
array([[ 0, 5, 10]])
>>> x.T
array([[ 0],
[ 5],
[10]])
>>> x.T + x
array([[ 0, 5, 10],
[ 5, 10, 15],
[10, 15, 20]])
>>> result = x.T + x
>>> result
array([[ 0, 5, 10],
[ 5, 10, 15],
[10, 15, 20]])
Тогда этот удобный встроенный:
>>> np.fill_diagonal(result, x**2)
>>> result
array([[ 0, 5, 10],
[ 5, 25, 15],
[ 10, 15, 100]])
Может заменить results[range(c), range(c)] = x**2
Вот как вы можете сделать это без использования numpy:
x = [[0,5,10] for i in range(3)]
output = [[x[i][j]**2 if i == j else x[i][j] for j,b in enumerate(a)] for i,a in enumerate(x)]
print(output)
Выход:
[[0, 5, 10], [0, 25, 10], [0, 5, 100]]
Попробуй это:
x.repeat(x.shape[1], axis=0)
x = x+x.T
x[np.arange(len(x)),np.arange(len(x))] = (np.diag(x)/2)**2
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.
[n[i][j]**2 if i == j else n[i][j] for j in i for i in n]
. (очевидно, вам нужно будет получить фактические индексы i и j, поэтому этот код является просто примером алгоритма. Но вы можете использоватьenumerate()
)