File "D:\403\myworld\modelZIP.py", line 142, in readCSVAll arr=np.array(nested_tuple) ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (165,) + inhomogeneous part.
时间: 2023-10-16 19:32:29 浏览: 40
这个错误通常发生在使用numpy库的`np.array()`函数将嵌套的不规则列表转换为numpy数组时。这种情况下,列表中的每个元素长度不一,导致numpy无法将其转换为规则的数组。
您可以使用列表推导式将不规则的嵌套列表转换为元组的嵌套形式,例如:
```python
lst = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
nested_tuple = tuple(tuple(x) for x in lst)
```
然后使用numpy库的`np.array()`函数将元组的嵌套形式转换为numpy数组,例如:
```python
import numpy as np
arr = np.array(nested_tuple)
```
如果您仍然遇到这个错误,请检查列表中的每个元素是否具有相同的形状。如果不是,您可以将其转换为嵌套的元组列表,并使用numpy库的`np.array()`函数转换为numpy数组,这样就可以避免这个错误。
相关问题
def data_generator(): for folder in os.listdir("D:/wjd"): for file in os.listdir("D:/wjd/"+folder): file_paths = glob.glob('D:/wjd/*.png') for file_path in file_paths: img = Image.open(file_path) img = img.resize((224, 224)) img_arr = np.array(img) img_tensor = tf.convert_to_tensor(img_arr) img_tensor = tf.expand_dims(img_tensor, axis=0) print(img_tensor.shape) print(img_tensor.shape) # 输出张量的形状,我感觉不对,我应该删除那两行代码啊
是的,你是正确的。在这个数据生成器函数中,`print(img_tensor.shape)` 这行代码是不必要的,因为它只是输出张量的形状,而不是将它们返回给调用者。因此,你可以将这两行代码删除,如下所示:
```python
def data_generator():
for folder in os.listdir("D:/wjd"):
for file in os.listdir("D:/wjd/"+folder):
file_paths = glob.glob('D:/wjd/*.png')
for file_path in file_paths:
img = Image.open(file_path)
img = img.resize((224, 224))
img_arr = np.array(img)
img_tensor = tf.convert_to_tensor(img_arr)
img_tensor = tf.expand_dims(img_tensor, axis=0)
yield img_tensor
```
这样修改后,这个函数将会生成一个张量序列,每个张量代表一个图片。你可以将这个函数作为参数传递给你的模型,用于训练和测试。
from PIL import Image import numpy as np img = Image.open('red1.jpg') cmyk_img = img.convert('CMYK') m_channel = cmyk_img.split()[2] m_arr = np.array(m_channel) m_arr[m_arr < 30] = 0 m_arr[m_arr >= 30] = 255 white_channel = Image.fromarray(m_arr) cmyk_channels = cmyk_img.split() cmyk_channels[2] = white_channel result_cmyk = Image.merge('CMYK', cmyk_channels) result_cmyk.save('red4.jpg')报错TypeError: 'tuple' object does not support item assignment
这个错误是因为`cmyk_img.split()`返回的是一个元组,元组是不可变的,无法直接替换其中的元素。你可以将它转换为列表,然后再进行修改。修改后的代码如下:
```python
from PIL import Image
import numpy as np
img = Image.open('red1.jpg')
cmyk_img = img.convert('CMYK')
m_channel = cmyk_img.split()[2]
m_arr = np.array(m_channel)
m_arr[m_arr < 30] = 0
m_arr[m_arr >= 30] = 255
white_channel = Image.fromarray(m_arr)
cmyk_channels = list(cmyk_img.split()) # 将元组转换为列表
cmyk_channels[2] = white_channel
result_cmyk = Image.merge('CMYK', cmyk_channels)
result_cmyk.save('red4.jpg')
```
这样就可以成功地将处理后的M通道替换原图像的M通道,并保存为red4.jpg。