#python #numpy #numpy-ndarray
Вопрос:
Тупица
Во-первых, я определяю «x» и функцию «пример» ниже:
import numpy as np
x=np.arange(1,4,1)
def example(d):
return 2*d
В этом простом случае, если я поставлю «x» в «пример»,,
y=example(x)
Я получаю» y», которое имеет ту же длину, что и x, и я могу быстро вычислить.
Однако, если я определю пример2, как показано ниже,
def example2(d):
matrix=np.array([[d,0],[0,d]]) ### last ] was missing
return matrix
и введите «x» в пример2,
y2=example2(x)
Что я получаю, так это
[[array([1, 2, 3]) 0]
[0 array([1, 2, 3])]]
<ipython-input-9-21f94eb7b4f4>:2: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
matrix=np.array([[d,0],[0,d]])
Также есть предупреждение.
Я действительно хочу создать ndarray(или список), который содержит матрицу в каждом термине без использования «для». Я могу сделать это, если использую «добавить», но для завершения вычислений требуется гораздо больше времени.
A1=np.array([[1,0],[0,1]])
A2=np.array([[2,0],[0,2]])
A3=np.array([[3,0],[0,3]])
y3=np.array([A1,A2,A3])
Если я назову каждую матрицу A1,A2,A3, которые созданы в примере 2,
то я хочу создать y3, просто введя «x» в созданную мной функцию.
Есть ли какие-то решения?
Комментарии:
1. последний случай имеет форму (3,2,2). Середина пытается сделать (2,2) с (3,), встроенным в него 4 (как). Очень разные
2. Итак, вы имеете в виду, что нет никакого способа сделать (3,2,2), введя «x» в функцию? Я просто хочу сделать y3 без использования «для» ,что приводит к задержке в расчетах. Я знаю, что если я определю [ ](пустой список) и «добавлю» каждую матрицу с помощью «для», я могу сделать y3, но я не хочу этого делать.
3. Создание
zeros((3,2,2))
и назначениеarr[:,0,0]=x
и т. Д
Ответ №1:
Вы можете инициализировать массив нужной формы и присвоить выбранные значения:
In [93]: arr = np.zeros((3,2,2),int)
...: arr[:,0,0] = [1,2,3]
...: arr[:,1,1] = [4,5,6]
...:
...:
In [94]: arr
Out[94]:
array([[[1, 0],
[0, 4]],
[[2, 0],
[0, 5]],
[[3, 0],
[0, 6]]])
То же самое, но с одним назначением расширенной индексации:
In [97]: arr = np.zeros((3,2,2),int)
...: arr[:,[0,1],[0,1]] = np.array([[1,2,3],[4,5,6]]).T
In [98]: arr
Out[98]:
array([[[1, 0],
[0, 4]],
[[2, 0],
[0, 5]],
[[3, 0],
[0, 6]]])
Для этого потребовалось несколько попыток, так как я получал ошибки вещания. Правильно определять размеры при выполнении подобных заданий непросто.
Ответ №2:
не следуя, но:
import numpy as np
x=np.arange(1,4,1)
def example(d):
return 2*d
y=example(x)
print(y)
def example2(d):
matrix=np.array([[d,0],[0,d]], dtype= object)
return matrix
y2=example2(x)
print('n___________________________')
print(y2)
дает:
[2 4 6]
___________________________
[[array([1, 2, 3]) 0]
[0 array([1, 2, 3])]]
так что никакой ошибки, не уверен, что это то, что вы искали, просто опубликуйте желаемый вывод, чтобы помочь другим, чтобы помочь вам