Nic*_*ert 10 python numpy multidimensional-array reshape
我有一个函数应该采用一维整数数组并将其形成一个1x3数组的2D数组.然后它应该采用每个1x3阵列并将其转换为3x1阵列.结果应该是3x1阵列的2D数组.这是我的功能
def RGBtoLMS(rgbValues, rgbLength): #Method to convert from RGB to LMS
print rgbValues
lmsValues = rgbValues.reshape(-1, 3)
print lmsValues
for i in xrange(len(lmsValues)):
lmsValues[i] = lmsValues[i].reshape(3, 1)
return lmsValues
Run Code Online (Sandbox Code Playgroud)
当我尝试将1x3阵列更改为3x1阵列时,问题就出现了.假设rgbValues = [14,25,19,24,25,28,58,87,43],我得到以下输出
[14 25 19 ..., 58 87 43]
[[14 25 19]
[24, 25, 28]
[58 87 43]]
ValueError [on line lmsValues[i] = lmsValues[i].reshape(3, 1)]: could not broadcast input array from shape (3,1) into shape (3)
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免这个错误?
正如评论中所提到的,您实际上只是修改一个具有不同形状的数组.在numpy中说你有一个二维数组1 x 3数组并没有多大意义.那究竟是一个n x 3数组.
我们从一个长度为1d的数组开始3*n(我在你的例子中添加了三个数字,以区分a 3 x n和n x 3数组之间的区别):
>>> import numpy as np
>>> rgbValues = np.array([14, 25, 19, 24, 25, 28, 58, 87, 43, 1, 2, 3])
>>> rgbValues.shape
(12,)
Run Code Online (Sandbox Code Playgroud)
并重塑它n x 3:
>>> lmsValues = rgbValues.reshape(-1, 3)
>>> lmsValues
array([[14, 25, 19],
[24, 25, 28],
[58, 87, 43],
[ 1, 2, 3]])
>>> lmsValues.shape
(4, 3)
Run Code Online (Sandbox Code Playgroud)
如果你想要塑造每个元素3 x 1,也许你只想转置数组.这会切换行和列,因此形状是3 x n
>>> lmsValues.T
array([[14, 24, 58, 1],
[25, 25, 87, 2],
[19, 28, 43, 3]])
>>> lmsValues.T.shape
(3, 4)
>>> lmsValues.T[0]
array([14, 24, 58, 1])
>>> lmsValues.T[0].shape
(4,)
Run Code Online (Sandbox Code Playgroud)
如果你真的想每个元素中lmsValues是一个1 x 3数组,你可以这样做,但后来它必须是一个三维阵列形状n x 1 x 3:
>>> lmsValues = rgbValues.reshape(-1, 1, 3)
>>> lmsValues
array([[[14, 25, 19]],
[[24, 25, 28]],
[[58, 87, 43]],
[[ 1, 2, 3]]])
>>> lmsValues.shape
(4, 1, 3)
>>> lmsValues[0]
array([[14, 25, 19]])
>>> lmsValues[0].shape
(1, 3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26003 次 |
| 最近记录: |