在不使用 "for" 的情况下将 2×2 矩阵放入数组中
Putting 2×2 matrices in ndarray without using "for"
Numpy
首先,我在下面定义“x”和函数“example”:
import numpy as np
x=np.arange(1,4,1)
def example(d):
return 2*d
在这个简单的例子中,如果我将“x”放入“example”,
y=example(x)
我得到“y”,它的长度与 x 相同,我可以快速计算。
但是,如果我如下定义 example2,
def example2(d):
matrix=np.array([[d,0],[0,d]]) ### last ] was missing
return matrix
并在示例2中输入“x”,
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(或列表),它在每个术语中都包含一个矩阵,而不使用“for”。如果我使用“附加”,我可以做到这一点,但完成计算需要更长的时间。
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])
如果我将示例 2 中创建的每个矩阵命名为 A1、A2、A3,
我想做的是通过将“x”输入到我创建的函数中来创建 y3。
有什么解决办法吗?
没有关注但是:
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])]]
所以没有错误,不确定是不是你要找的,只是post你想要的输出来帮助其他人帮助你
您可以初始化所需形状的数组,并分配选定的值:
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]]])
这需要多次尝试,因为我遇到了广播错误。在进行这样的分配时要获得正确的尺寸是很棘手的。
Numpy
首先,我在下面定义“x”和函数“example”:
import numpy as np
x=np.arange(1,4,1)
def example(d):
return 2*d
在这个简单的例子中,如果我将“x”放入“example”,
y=example(x)
我得到“y”,它的长度与 x 相同,我可以快速计算。
但是,如果我如下定义 example2,
def example2(d):
matrix=np.array([[d,0],[0,d]]) ### last ] was missing
return matrix
并在示例2中输入“x”,
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(或列表),它在每个术语中都包含一个矩阵,而不使用“for”。如果我使用“附加”,我可以做到这一点,但完成计算需要更长的时间。
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])
如果我将示例 2 中创建的每个矩阵命名为 A1、A2、A3, 我想做的是通过将“x”输入到我创建的函数中来创建 y3。
有什么解决办法吗?
没有关注但是:
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])]]
所以没有错误,不确定是不是你要找的,只是post你想要的输出来帮助其他人帮助你
您可以初始化所需形状的数组,并分配选定的值:
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]]])
这需要多次尝试,因为我遇到了广播错误。在进行这样的分配时要获得正确的尺寸是很棘手的。